学习PHP设计模式PHP来实现生成器模式

学习PHP设计模式PHP来实现生成器模式
生成器模型允许产品的内部表示和产品的生产过程被分离,从而产生具有不同内部表示的产品。

一、生成器模式结构图

二、建造者模式中的主要角色

抽象生成器(构造器)的作用:定义一个抽象接口来规范产品组件的构造(即标准化特定构造器的构建方法)。方法的构造和返回方法必须包含在标准方法中。

具体的生成器(具体建造者)的作用:通过对摘要生成器的实现定义的方法。具体的建筑工人和业务逻辑高度相关。应用程序最终将通过调用在该角色中实现的构建方法,根据业务逻辑创建产品,然后在构建完成后返回生成产品实例,一般由客户或抽象工厂创建。

董事(总监)角色:这个角色的角色是将具体的建造者角色称为构建产品,导演与产品类别没有直接的关系,而与产品类别的对话是一个特定的抽象角色。

产品(产品)角色:在指导下由构建者创建的复杂对象

导演角色与客户直接相关。它理解客户机的业务逻辑,将客户机创建的请求划分为产品组件,然后调用特定的产品角色来执行构建操作

三、生成器模型的优缺点

生成器模式的优点是构建模式可以很好地将一个对象与相关业务逻辑的实现分离开来,这样就可以在不改变事件逻辑的情况下很容易地实现增加(或更改)实现。

生成器模式的缺点:修改生成器的接口将导致对所有执行类的修改。

四和Builder模式的使用场景和效果

生成器模型应该使用以下内容:

1。需要生成的产品对象具有复杂的内部结构。

2。需要生成的产品对象的属性是相互依赖的,生成器模式可以强制生成顺序

3,在对象创建过程中使用了系统中的其他对象,这在产品对象的创建过程中并不容易获得。

构造函数模型的使用具有以下效果:

1。Builder模式的使用使产品的内部外观发生了独立的变化,使用Builder模式可以让客户不必知道产品内部结构的细节。

2,每个构建者都是相对独立的,与其他构建器无关。

三.由模型建造的最终产品更容易控制

五、生成器模式和其他模式

抽象工厂模式(抽象工厂模式):在抽象工厂模式,每次工厂对象被调用时,它将返回一个完整的产品对象,和客户可以组装这些产品进入一个更大、更复杂的产品,或没有。建造者模式不同的是,它建立了一个复杂的产品在一个小位,和该产品的装配过程发生在建设者。两者之间的区别在于是否有一个装配过程和装配过程中的位置。这两种设计模式可以连接在一起,和客户端调用另一个抽象工厂模式,通过调用工厂建筑的角色作用。工厂模型返回不同的产品家族的部分,和建设者它们组装。

政策模式(策略模式):建造者模式在结构上接近的政策模式,其实和建造者模式是政策模式的一种特殊情况,两者之间的区别是,目的是不同的。建造者模式对新对象的施工由客户一点点,和政策模型的目的是提供一个抽象接口的算法。

生成器模式和模板方法模式:生成器模式在降级和失去角色后可以发展成模板方法模式。

构建模式和合成模式:综合模式描述对象树的组成结构,而生成器模式可以用来描述对象树的生成过程。

以上4点来自java与模式

六、Builder模式php示例

< PHP

*产品
*在产品类中只有一个字符串演示产品
* /
类产品{

*产品的一组组件
* /
私人_parts美元;

公共功能__construct(){
美元-> _parts =阵();
}

公共函数添加($部分){
返回array_push(美元-> _parts,$的一部分);
}

公共函数显示(){
产品包括:;
array_map('printf,美元-> _parts);
}
}
*摘要生成器
* /
抽象类生成器{
*产品零件施工方法1
* /
公共buildpart1抽象函数();
*产品零件施工方法2
* /
公共buildpart2抽象函数();
*产品退货方法
* /
摘要公共getResult()函数;
}
*具体的建设者
* /
具体建造者类扩展生成器{

私人_product美元;

公共功能__construct(){
美元-> _product =新产品();
}

公共功能buildpart1(){
这_product美元-> ->添加(第一);
}

公共功能buildpart2(){
这_product美元-> ->添加(二);
}

公共职能getResult(){
返回_product美元->;
}
}
*主任
* /
班主任{

公共功能__construct(Builder生成器美元){
$生成器-> buildpart1();
$生成器-> buildpart2();
}
}
客户端类{
*主程序。
* /
公共静态函数main(){
buidler美元=新的具体建造者();
新导演导演=美元(美元buidler);
产品=美元美元buidler -> getResult();
产品>显示();
}

}

客户::主();
>
以上是使用php实现的Builder模型代码,和一些关于Builder模式的概念区别,希望能对大家有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部