手机版

学习php设计模式php实现复合模式

时间:2021-09-20 来源:互联网 编辑:宝哥软件园 浏览:

1.它旨在将对象组合成树形结构,以表示“部分-整体”的层次结构。复合使用户能够一致地使用单个对象和组合对象。复合改变对象的结构和组成。二、组合模式中的主要角色:抽象组件角色:抽象角色,为参与组合的对象指定一个接口。如果合适,实现所有类共享的接口的默认行为。声明一个接口来访问和管理叶组件的角色,叶组件是组件的子组件:它表示组合中的叶节点对象,叶节点没有子节点。定义程序集中基本对象的行为。复合角色:存储子组件。定义那些包含子组件的部件的行为。在组件接口中实现与子组件相关的操作。客户端:通过组件接口操作复合组件的对象。3.复合模式的优缺点。1.简化客户端代码。2.更容易添加新类型的组件。

Composite Pattern的缺点:它让你的设计更加通用,而且很容易添加组件,这也会造成一些问题,就是很难对组件进行组合限制。4.复合模式的应用场景:1。您希望表示对象的部分-整体层次结构;2.您希望用户忽略复合对象和单个对象之间的差异,用户将统一使用复合结构中的所有对象。5.复合模式和其他模式装饰模式:装饰模式通常与复合模式一起使用。当装饰和构图一起使用时,它们通常有一个共同的父类。因此,装饰必须支持带有add、remove和getChild操作的Component接口的元素共享模式:Flyweight模式允许您共享组件,但不再引用它们的父组件迭代器模式;Itertor可用于遍历复合访问者模式;访问者将应该分布在复合类和叶类中的操作和行为本地化。不及物动词安全合成模式声明用于管理复合类中子类对象的所有方法。这样做是安全的。因为叶类型的对象根本没有管理子类的方法,如果客户端对叶类对象使用这些方法,程序在编译时会出错。如果编译器失败,将不会有运行时错误。缺点是不够透明,因为叶子类和合成类会有不同的接口。七.安全综合模式结构图。

八、安全合成模式PHP示例。

?php/** *抽象组件角色*/接口组件{ /** *返回自己的实例*/public函数GetComposite();/** * 示例方法*/公共函数操作();} /** * 树枝组件角色*/类复合实现组件{ private $ _ composites public function _ _ construct(){ $ this-_ composites=array();}公共函数GetComposite(){ return $ this;} /** * 示例方法,调用各个子对象的操作方法*/公共函数操作(){ echo '复合操作开始: br/';foreach($ this-_ composites as $ composite){ $ composite-operation();}回显"复合操作结束: br/br/";} /** * 聚集管理方法添加一个子对象* @param组件$组件子对象*/public function add(Component $ Component){ $ this-_ composites[]=$ Component;} /** * 聚集管理方法删除一个子对象* @param组件$组件子对象* @返回布尔值删除是否成功*/public function remove(Component $ Component){ foreach($ this-_ composites as $ key=$ row){ if($ Component==$ row){ unset($ this-_ composites[$ key]);返回真;} }返回FALSE} /** *聚集管理方法返回所有的子对象*/public function GetChild(){ return $ this-_ composites;} }类叶子实现了组件{ private $ _ name public function _ _ construct($ name){ $ this-_ name=$ name;} public function operation(){ echo ' Leaf operation ',$this-_name,' br/';}公共函数getComposite(){ 0返回null}} /** *客户端*/class Client { /** *主程序*/public static function main(){ $ Leaf 1=new Leaf(' first ');$leaf2=新leaf('秒');$ Composite=新的Composite();$ composite-add($ leaf 1);$ composite-add($ leaf 2);$ composite-operation();$ composite-remove($ leaf 2);$ composite-operation();} }客户端:3360 main();以上就是使用服务器端编程语言(专业超文本预处理器的缩写)实现合成模式的代码,还有一些关于合成模式的概念区分,希望对大家的学习有所帮助。

版权声明:学习php设计模式php实现复合模式是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。