1.正是对象的存储开销,打算用共享技术来有效支持大量细粒度对象的变化。
三、享受模式中的主要角色抽象享受角色:这个角色是所有特定享受类的超类,它指定了这些类要实现的公共接口。那些需要外在状态的操作,可以通过调用commerce:实现Flyweight接口,拉回内部状态的存储空间(如果有的话),以参数的形式传递到ConcreteFlyweight的角色中。混凝土飞行重量对象必须是可共享的。存储的状态必须是内部非共享的混凝土飞行重量角色:并非所有飞行重量子类都需要共享。Flyweigth使共享成为可能,但它并不强制共享。FlyweightFactory角色:负责创建和管理flyweight角色。该角色必须确保特权对象可以作为客户端被系统正确共享:该角色需要维护对所有特权对象的引用。这个角色需要自己存储所有元对象的外部状态。4.元模式的优缺点:Flyweight模式可以大大减少内存中的对象数量。元共享模式的缺点:1。Flyweight模式使系统更加复杂;2.Flyweigth模式将元共享对象的状态外化,而读取外部状态则使运行时间稍长;5.元共享模式的适用场景当下列条件成立时,使用Flyweight模式:1 .应用程序使用大量对象;2.这完全是因为使用了大量的物体。这会导致巨大的存储开销。3.物体的大多数状态都可以变成外部状态。4.如果对象的外部状态被删除,许多对象组可以用相对较少的共享对象来替换。5.应用程序不依赖于对象标识。不及物动词享受模式和其他模式的单体模式:客户端是指享受对象,通过工厂对象创建或获取。客户端每次引用一个享受对象,都可以通过同一个工厂对象引用想要的享受对象。因此,工厂可以被设计成单例模式,这样客户端只能引用一个工厂实例。因为所有的元对象都由一个工厂对象管理,所以没有必要在客户端引用多个工厂对象。无论是简单的享受模式还是复杂的享受模式,都可以设计成单体模式,对结果不会有任何影响。复合模式:复合共享模式实际上是简单共享模式和复合模式的结合。简单的享受对象可以作为叶子对象共享,复合的享受对象可以作为分支对象,因此复合的享受角色可以加入聚合管理方式。七、享元模式PHP示例。
?php/** *抽象享元角色*/抽象类Flyweight { /** *示意性方法* @param字符串$state外部状态*/抽象公共函数操作($ state);} /** * 具体享元角色*/class混凝土重量扩展了flyweight { private $ _ internative state=null;/** * 构造方法* @param字符串$state内部状态*/public function _ _ construct($ state){ $ this-_ internal state=$ state;}公共函数操作($ State){ echo '概念飞行重量操作,无限状态=' .$this-_intrinsicState .外部状态='。$州br/';} } /** * 不共享的具体享元,客户端直接调用*/class unsharcedcentflyweight扩展了flyweight { private $ _ intrinsic state=null;/** * 构造方法* @param字符串$state内部状态*/public function _ _ construct($ state){ $ this-_ internal state=$ state;}公共函数操作($ State){ echo ' unsharpedconcretflyweight操作,固有状态='。$this-_intrinsicState .外部状态='。$州br/';} } /** * 享元工厂角色*/class flyweights factory { private $ _ flyweights;public function _ _ construct(){ $ this-_ flyweights=array();} public function getflyweighth($ state){ if(isset($ this-_ flyweights[$ state]){ return $ this-_ flyweights[$ state];} else { return $ this-_ fly weights[$ state]=new concrete fly weight($ state);} } } /** * 客户端*/class Client { /** *主程序*/public static function main(){ $ fly weight factory=new fly weight factory();$ fly weight=$ fly weight factory-getfly weight('状态a’);$飞行重量-操作('其他状态a’);$ fly weight=$ fly weight factory-getfly weight('状态b’);$飞行重量-操作('其他状态b’);/* 不共享的对象,单独调用*/$uflyweight=新的反共享混凝土飞行重量('状态a’);$ uflyweight-操作('其他状态a’);} }客户端:3360 main();八、复合享元模式复合享元模式对象是由一些单纯享元使用合成模式加以复合而成复合享元角色所代表的对象是不可以共享的,但是一个复合享元对象可以分解成为多个本身是单纯享元对象的组合。九、复合享元模式服务器端编程语言(专业超文本预处理器的缩写)示例
?php/** *抽象享元角色*/抽象类Flyweight { /** *示意性方法* @param字符串$state外部状态*/抽象公共函数操作($ state);} /** * 具体享元角色*/class混凝土重量扩展了flyweight { private $ _ internative state=null;/** * 构造方法* @param字符串$state内部状态*/public function _ _ construct($ state){ $ this-_ internal state=$ state;}公共函数操作($ State){ echo '概念飞行重量操作,无限状态=' .$this-_intrinsicState .外部状态='。$州br/';} } /** * 不共享的具体享元,客户端直接调用*/class unsharedconcreditflyweight扩展了fly weight { private $ _ fly weights/* * *构造方法* @param字符串$state内部状态*/public function _ _ construct(){ $ this-_ flyweights=array();}公共功能操作($ state){ foreach($ this-_ fly weights as $ fly weight){ $ fly weight-operation($ state);} }公共函数添加($state,Flyweight $ Flyweight){ $ this-_ flyweights[$ state]=$ Flyweight;} } /** * 享元工厂角色*/class flyweights factory { private $ _ flyweights;public function _ _ construct(){ $ this-_ flyweights=array();}公共函数getflyweighth($ state){ if(is _ array($ state)){//复合模式$uFlyweight=新的反共享混凝土飞行重量();foreach($ state as $ row){ $ uFlyweight-add($ row,$ this-getflyweighth($ row));}返回$ uFlyweight } else if(is _ string($ state)){ if(isset($ this-_ fly weights[$ state]){ return $ this-_ fly weights[$ state];} else { return $ this-_ fly weights[$ state]=new concrete fly weight($ state);} } else {返回null} } } /** *客户端*/class Client { /** *主程序*/public static function main(){ $ fly weight factory=new fly weight factory();$ fly weight=$ fly weight factory-getfly weight('状态a’);$飞行重量-操作('其他状态a’);$ fly weight=$ fly weight factory-getfly weight('状态b’);$飞行重量-操作('其他状态b’);/* 复合对象*/$ uflyweight=$ flyweight factory-getflyweight(数组('状态一个','状态b’);$ uflyweight-操作('其他状态a’);} }客户端:3360 main();十、PHP中享元模式的地位相对于其它模式飞行重量模式在服务器端编程语言(专业超文本预处理器的缩写)的现有版本中没有太大的意义,因为服务器端编程语言(专业超文本预处理器的缩写)的生命周期是页面级的,即从一个服务器端编程语言(专业超文本预处理器的缩写)文件执行开始会载入所需的资源,当执行完毕后,这些所有的资源会被全部释放,而一般来说我们也不会让一个页面执行太长时间。
以上就是使用服务器端编程语言(专业超文本预处理器的缩写)实现享元模式的代码,还有一些关于享元模式的概念区分,希望对大家的学习有所帮助。