php 建造者生成器模式学习笔记

适用场景:

1、 需要生成的产品对象有复杂的内部结构。
2、 需要生成的产品对象的属性相互依赖,生成器模式可以强迫生成顺序。
3、 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

使用效果:

1、 生成器模式的使用使得产品的内部表象可以独立的变化。使用生成器模式可以使客户端不必知道产品内部组成的细节。
2、 每一个Builder都相对独立,而与其它的Builder无关。
3、 模式所建造的最终产品更易于控制。

<?php
/**
* Created by PhpStorm.
*/
 
/**具体产品角色 车
* Class Car
*/
class Car
{
public $_head;
public $_engine;//引擎
public $_tyre;//轮胎
 
function show()
{
echo "车头的颜色:{$this->_head}<br/>";
echo "引擎的品牌:{$this->_engine}<br/>";
echo "轮胎的品牌:{$this->_tyre}<br/>";
}
}
 
/**抽象车的建造者(生成器)
* Class CarBuilder
*/
abstract class CarBuilder
{
protected $_car;
 
function __construct()
{
$this->_car=new Car();
}
 
abstract function BuildHead();
abstract function BuildEngine();
abstract function BuildTyre();
abstract function GetCar();
}
 
/**具体车的建造者(生成器) 宝马
* Class BMW
*/
class BMW extends CarBuilder
{
 
function BuildHead()
{
// TODO: Implement BuilderHead() method.
$this->_car->_head="Black";
}
 
function BuildEngine()
{
// TODO: Implement BuildEngine() method.
$this->_car->_engine="BMW";
}
 
function BuildTyre()
{
// TODO: Implement BuildTyre() method.
$this->_car->_tyre="BMW";
}
 
function GetCar()
{
// TODO: Implement GetCar() method.
return $this->_car;
}
}
 
/**别克
* Class BuickBird
*/
class BuickBird extends CarBuilder
{
 
function BuildHead()
{
// TODO: Implement BuildHead() method.
$this->_car->_head="Red";
}
 
function BuildEngine()
{
// TODO: Implement BuildEngine() BMmethod.
$this->_car->_engine="Buick";//
}
 
function BuildTyre()
{
// TODO: Implement BuildTyre() method.
$this->_car->_tyre="Buick";
}
 
function GetCar()
{
// TODO: Implement GetCar() method.
return $this->_car;
}
}
 
/**指挥者
* Class Director
*/
class Director
{
/**
* @param $_builder 建造者
* @return mixed 产品类:车
*/
function Construct($_builder)
{
$_builder->BuildHead();
$_builder->BuildEngine();
$_builder->BuildTyre();
return $_builder->GetCar();
}
}

时间: 2024-10-11 01:55:00

php 建造者生成器模式学习笔记的相关文章

java设计模式之外观模式学习笔记_java

外观模式: 又称门面模式: 外观Facade为子系统的一组接口提供一个一致界面,使得这组子系统易于使用(通过引入一个新的外观角色降低原系统复杂度,同时降低客户类与子系统的耦合度). 图片来源: 设计模式: 可复用面向对象软件的基础. 实现 案例需求: 租房 有过自己找房租房经历的同学能够体会得到找房是件很痛苦的事, 不光要挨个小区跑而且还要跟(二)房东讨价还价. 于是后来学聪明了, 不再自己挨门挨户的磨嘴皮子, 而是直接找像链家.我爱我家这样的房屋中介, 他们手上握有一定的房源, 我们只需付给他

PHP 正则表达式匹配模式学习笔记

PHP中对于正则处理文本提供了两种方式,一种是PCRE方式(PCRE库是一个实现了与perl 5在语法和语义上略有差异(详见下文)的正则表达式模式匹配功能的函数集. 当前的实现对应于perl 5.005.):另一个是POSIX方式.   PCRE函数库中的函数使用的模式语法非常类似perl. 表达式必须用分隔符闭合, 比如一个正斜杠(/). 分隔符可以使任意非字母数字, 除反斜杠()和空字节之外的非空白ascii字符. 如果分隔符 在表达式中使用, 需要使用反斜线进行转义. 自php 4.0.4

php Prototype原型模式学习笔记

待解决的问题:我们能否减少new的使用,同时避免需要新增对象的时候,了解对象的类名. 思路:php5提供了克隆方法,我们可以新增一个对象,然后每次需要新增和她同类的对象,克隆他就可以了. 原型(Prototype)模式示例:  代码如下 复制代码 <?php //机兵类 class Marine {   //所属的用户ID   public $playerID   //构造函数,参数为用户的id   public function __construct($id)   {   $this->p

Java设计模式之享元模式学习笔记

享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式.享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象. Java中String的实现就是一个典型的享元模式应用,Java中的String存在字符串常量池中,Java会确保一个字符串常量在常量池中只有一个拷贝.数据库连接池也是一个比较电信的享元模式应用,可简单理解为先初始化一定数量的数据库连接,

Python单例模式和工厂模式学习笔记

一. 单例模式( Singleton ) 所谓单例模式,也就是说不管什么时候都要确保只有一个对象实例存在.很多情况下,整个系统中只需要存在一个对象,所有的信息都从这个对象获取,比如系统的配置对象,或者是线程池.这些场景下,就非常适合使用单例模式. 总结起来,就是说不管初始化一个对象多少次,真正干活的对象只会生成一次并且在首次生成. 用Python 实现单例模式的方法有很多,先来看第一种方式. # !/usr/bin/python3 # -*- coding:utf-8 -*- class sin

PHP设计模式之工厂模式学习笔记

在大型系统中,许多代码依赖于少数几个关键类.需要更改这些类时,可能会出现困难.例如,假设您有一个从文件读取的 User 类.您希望将其更改为从数据库读取的其他类,但是,所有的代码都引用从文件读取的原始类.这时候,使用工厂模式会很方便. 工厂模式是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动更改. 示例1:显示工厂类的一个示列. 等式的服务器端包括两个部分:数据库和一组 P

PHP设计模式之:原型模式学习笔记

原型模式其实和工厂模式比较类似,都是用来创建对象的,只不过与工厂模式的实现不同.原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象.这样就免去了类创建时重复的初始化操作了.原型模式适用于大对象的创建,因为在创建一个大对象时,需要很大的开销.如果每次都去new就会消耗很大,原型模式仅需从内存拷贝既可. 还是继续通过实例来向大家演示一下 <?php /**  * 抽象原型角色  */ interface Prototype {     public function clone

php Builder建造器模式学习笔记

思路:既然星际的画面由几个部分组成:地图(就是地形和矿产),建筑,部队.那么我们把他们看成是零件,组装起来就是最后的产品(整个画面). 建造器(Builder)模式示例:  代码如下 复制代码 <?php //规范制造各个零件的接口 interface Builder {   //制造地图零件   public function buildMapPart();   //制造建筑零件   public function buildBuildingPart();   //制造部队零件   publi

php State状态模式学习笔记

如果按照一般的思路,每次我们对一个小兵进行操作的时候,比如一辆坦克,我们都要用if判断他的状态,这样代码中会有很多的if,else或者swith. 不过我们可以发现,我们需要的是他在某个状态下的行为,如果把这些行为按照状态封装起来,就可以减少大量的判断. 待解决的问题:封装坦克的状态,让状态自己去控制行为. 思路:把状态作为属性,兵种类本身只控制状态的变化,具体的行为由状态类定义. 状态(State)模式示例:  代码如下 复制代码 <?php //坦克状态的接口 interface TankS