<?php

interface Builder{
public function head(); public function body(); public function foot(); public function hand();
} class Director { private static $_instance = null;
private $builder = null;
private function __construct(Builder $builder){
$this->builder = $builder;
}
public static function getInstance(Builder $builder){
if(self::$_instance == null){
self::$_instance = new Director($builder);
}
return self::$_instance;
}
private function createHead(Builder $builder = null){
if($builder){
return $builder->head();
}else{
return $this->builder->head();
}
}
private function createBody(Builder $builder = null){
if($builder){
return $builder->body();
}else{
return $this->builder->body();
}
}
private function createHand(Builder $builder = null){
if($builder){
return $builder->hand();
}else{
return $this->builder->hand();
}
}
private function createFoot(Builder $builder = null){
if($builder){
return $builder->foot();
}else{
return $this->builder->foot();
}
}
public function startCreate(){
$this->createFoot();
$this->createBody();
$this->createHand();
$this->createHead();
echo "\n人造出来嘞";
}
} class zhangsan implements Builder{ public function foot(){
echo "张三的脚被造出来了\n";
} public function hand(){
echo "张三的手被造出来嘞\n";
} public function head(){
echo "张三的头被造出来了\n";
} public function body(){
echo "张三的身体被造出来嘞\n";
}
} class lisi implements Builder{ public function foot(){
echo "李四的脚被造出来了\n";
} public function hand(){
echo "李四的手被造出来嘞\n";
} public function head(){
echo "李四的头被造出来了\n";
} public function body(){
echo "李四的身体被造出来嘞\n";
}
} $builder = Director::getInstance(new zhangsan());
$builder->startCreate();
$builder = Director::getInstance(new lisi());
$builder->startCreate();

建造者模式->代码示例的更多相关文章

  1. Go并发模式代码示例

    演讲稿:Go Concurrency Patterns Youtube视频 作者:Rob Pike 练习题目:谷歌搜索:一个虚拟框架 谷歌搜索1.0 PPT从43页开始:https://talks.g ...

  2. 设计模式之Builder建造者模式 代码初见

    public class EmployeeBuilder { private int id = 1; private string firstname = "first"; pri ...

  3. Java设计模式14:建造者模式

    什么是建造者模式 发现很多框架的源码使用了建造者模式,看了一下觉得挺实用的,就写篇文章学习一下,顺便分享给大家. 建造者模式是什么呢?用一句话概括就是建造者模式的目的是为了分离对象的属性与创建过程,是 ...

  4. 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用

    今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模 ...

  5. java设计模式之建造者模式

    学习了设计模式,一直感觉有进步又没有进步,与同学.同事探讨了一下.变化不可能一会就可以的,需要努力坚持.不管进步大小,也不管是否进步,做到勿忘初心,做自己喜欢的事情就好.还有几个设计模式一直没有写,原 ...

  6. JavaScript设计模式之建造者模式

    一.建造者模式模式概念 建造者模式可以将一个复杂的对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.也就是说如果我们用了建造者模式,那么用户就需要指定需要建造的类型就可以得到它们,而具体 ...

  7. Java描述设计模式(06):建造者模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 基于建造者模式,描述软件开发的流程. 1.代码实现 /** * 基于建造者模式描述软件开发 */ public class C0 ...

  8. Effective Java —— 多字段下考虑使用建造者模式构建实例

    本文参考 本篇文章参考自<Effective Java>第三版第二条"Consider a builder when faced with many constructor pa ...

  9. 《大话设计模式》ruby版代码:建造者模式

    需求: 画一个小人,有头,有身体,两手两脚即可. 初始代码: # -*- encoding: utf-8 -*- #小人一 puts '这是第一个小人' puts '小人一:头' puts '小人一: ...

随机推荐

  1. poj2350

    #include <stdio.h> #include <stdlib.h> int main() { ],tim,i; scanf("%d",&n ...

  2. poj1563---蜗牛爬井

    #include <stdio.h> #include <stdlib.h> int main() { int dayTh; float Udis,currentHeight, ...

  3. Spring mvc 简单异常配置jsp页面

    原文出处:http://howtodoinjava.com/spring/spring-mvc/spring-mvc-simplemappingexceptionresolver-example/ 这 ...

  4. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(四)

    通过前面的操作,我们已经可以创建一个带有我们自己的PCI的watchdog外设qemu 虚拟机了. 目的: 1. 了解我们的外设情况. 2. 为在guest中开发我们自己的linux PCI驱动程序做 ...

  5. linux环境之监听端口配置

    export JAVA_OPTS="-Dcom.sun.management.jmxremote.port=18950 -Dcom.sun.management.jmxremote.auth ...

  6. PLSQl远程连接oracle数据库

    PLSQL远程连接Oracle 10G 1.在安装ORACLE服务器的机器上搜索下列文件, ORACLE 服务器上的文件 oci.dll     ocijdbc10.dll     ociw32.dl ...

  7. ASP.NET导出EXCEl方法使用EXCEl对象

    导出功能必须使用  office中EXCEl对象,整个操作如同在操作EXCEl一样,建立EXCEl应用----建立工作簿---建立sheet表单页, 代码实现过程中,如果想对单元格实现一些操作,或者汇 ...

  8. wing 5.0 注册机

    输入License id 进入下一页获得request key ,输入request key 后点击生成,即可生成激活码,亲测可用 下载链接 密码:adwj

  9. Nio Client

    public class NIOClient { static int SIZE = 2; final static int bufferSize = 500 * 1024; static InetS ...

  10. BZOJ 3669: [Noi2014]魔法森林( LCT )

    排序搞掉一维, 然后就用LCT维护加边MST. O(NlogN) ------------------------------------------------------------------- ...