


1. Intention
Group objects into tree structures to represent part-whole hierarchies. Composite enables users to use single objects and composite objects consistently.
What Composite changes is the structure and composition of an object.
2. Main characters in synthesis mode
Abstract component (Component) role: Abstract role specifies an interface for the objects participating in the combination. Where appropriate, implement the default behavior of interfaces common to all classes. Declare an interface for accessing and managing subcomponents of Component
Leaf component (Leaf) role: represents the leaf node object in the combination, and the leaf node has no child nodes. Defines the behavior of primitive objects in a composition.
Tree component (Composite) role: Storage sub-components. Defines the behavior of those components that have subcomponents. Implement operations related to subcomponents in the Component interface.
Client: Manipulate the object of the combined component through the Component interface
3. Advantages and disadvantages of synthesis mode
Advantages of Composite mode
1. Simplify customer code
2. Make it easier to add new types of components
Disadvantages of the Composite pattern: making your design more general and easy to add components will also cause some problems, that is, it is difficult to limit the components in the combination
4. Applicable Scenarios of Synthesis Mode
1. You want to represent the part-whole hierarchy of the object
2. You want users to ignore the difference between composite objects and single objects, and users will use all objects in the composite structure uniformly.
5. Synthesis mode and other modes
Decorator pattern: Decorator pattern is often used together with Composite pattern. When decorators are used with composition, they usually have a common parent class. Therefore the decoration must support the Component interface with add, remove and getChild operations
Flyweight mode: Flyweight mode allows you to share components but no longer reference their parent widgets
Iterator mode: Itertor can be used to traverse Composite
Visitor pattern: Visitor localizes operations and behaviors that should be distributed in the Composite and Leaf classes.
6. Safe synthesis mode
Declare all methods used to manage subclass objects in the Composite class. This approach is safe. Because leaf type objects do not have methods to manage subclasses at all, if the client uses these methods on leaf type objects, the program will error at compile time. If the compilation fails, there will be no runtime errors
The disadvantage of this is that it is not transparent enough, because the leaf class and the composite class will have different interfaces.
7. Safe synthesis mode structure diagram
8. Safe synthesis mode PHP example
<?php /** * 抽象组件角色 */ interface Component { /** * 返回自己的实例 */ public function getComposite(); /** * 示例方法 */ public function operation(); } /** * 树枝组件角色 */ class Composite implements Component { private $_composites; public function __construct() { $this->_composites = array(); } public function getComposite() { return $this; } /** * 示例方法,调用各个子对象的operation方法 */ public function operation() { echo 'Composite operation begin:<br />'; foreach ($this->_composites as $composite) { $composite->operation(); } echo 'Composite operation end:<br /><br />'; } /** * 聚集管理方法 添加一个子对象 * @param Component $component 子对象 */ public function add(Component $component) { $this->_composites[] = $component; } /** * 聚集管理方法 删除一个子对象 * @param Component $component 子对象 * @return boolean 删除是否成功 */ public function remove(Component $component) { foreach ($this->_composites as $key => $row) { if ($component == $row) { unset($this->_composites[$key]); return TRUE; } } return FALSE; } /** * 聚集管理方法 返回所有的子对象 */ public function getChild() { return $this->_composites; } } class Leaf implements Component { private $_name; public function __construct($name) { $this->_name = $name; } public function operation() { echo 'Leaf operation ', $this->_name, '<br />'; } public function getComposite() { return null; } } /** * 客户端 */ class Client { /** * Main program. */ public static function main() { $leaf1 = new Leaf('first'); $leaf2 = new Leaf('second'); $composite = new Composite(); $composite->add($leaf1); $composite->add($leaf2); $composite->operation(); $composite->remove($leaf2); $composite->operation(); } } Client::main(); ?>
synthesis mode. There are also some conceptual distinctions about the synthesis mode. I hope it will be helpful to everyone's learning.

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Linux new version
SublimeText3 Linux latest version

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

SublimeText3 Chinese version
Chinese version, very easy to use

Notepad++7.3.1
Easy-to-use and free code editor

Dreamweaver Mac version
Visual web development tools
