建造者模式->代码示例
<?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();
建造者模式->代码示例的更多相关文章
- Go并发模式代码示例
演讲稿:Go Concurrency Patterns Youtube视频 作者:Rob Pike 练习题目:谷歌搜索:一个虚拟框架 谷歌搜索1.0 PPT从43页开始:https://talks.g ...
- 设计模式之Builder建造者模式 代码初见
public class EmployeeBuilder { private int id = 1; private string firstname = "first"; pri ...
- Java设计模式14:建造者模式
什么是建造者模式 发现很多框架的源码使用了建造者模式,看了一下觉得挺实用的,就写篇文章学习一下,顺便分享给大家. 建造者模式是什么呢?用一句话概括就是建造者模式的目的是为了分离对象的属性与创建过程,是 ...
- 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用
今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模 ...
- java设计模式之建造者模式
学习了设计模式,一直感觉有进步又没有进步,与同学.同事探讨了一下.变化不可能一会就可以的,需要努力坚持.不管进步大小,也不管是否进步,做到勿忘初心,做自己喜欢的事情就好.还有几个设计模式一直没有写,原 ...
- JavaScript设计模式之建造者模式
一.建造者模式模式概念 建造者模式可以将一个复杂的对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.也就是说如果我们用了建造者模式,那么用户就需要指定需要建造的类型就可以得到它们,而具体 ...
- Java描述设计模式(06):建造者模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 基于建造者模式,描述软件开发的流程. 1.代码实现 /** * 基于建造者模式描述软件开发 */ public class C0 ...
- Effective Java —— 多字段下考虑使用建造者模式构建实例
本文参考 本篇文章参考自<Effective Java>第三版第二条"Consider a builder when faced with many constructor pa ...
- 《大话设计模式》ruby版代码:建造者模式
需求: 画一个小人,有头,有身体,两手两脚即可. 初始代码: # -*- encoding: utf-8 -*- #小人一 puts '这是第一个小人' puts '小人一:头' puts '小人一: ...
随机推荐
- 算法精解(C语言描述) 第4章 读书笔记
第4章 算法分析 1.最坏情况分析 评判算法性能的三种情况:最佳情况.平均情况.最坏情况. 为何要做最坏情况分析: 2.O表示法 需关注当算法处理的数据量变得无穷大时,算法性能将趋近一个什么样的值.一 ...
- hive 分配map数过少导致任务执行慢
数据表大概150M,但是只有几个字段,导致行数特别多,当使用正则表达式去匹配时执行较慢. 解决思路:增大map数; //设置reduce数为150,将原表分成150份,map数无法直接设置,因为和输入 ...
- 软件开发常用Linux命令
解压缩 tar -zxvf xxx.tar.gz 文件显示及查找常用于分析log //显示file中包含aaa的行 cat <file>|grep aaa 查看cpu memory基本信息 ...
- @AutoWired使用
Spring MVC @autowired的使用: spring MVC使用注解配置方式相对于xml配置方式具有很多优势: 充分利用java的反射机制获取类的结构信息,这些信息可以减少配置的工作!Sp ...
- malloc 申请得到的内存后,再 free 释放它的时候,操作系统会立即收回那块内存吗?
stackoverflow上的回答: In many malloc/free implementations, free does normally not return the memory to ...
- 获取select赋值
<select class="sel-ul-add" id="xuanzhe"> <option>A</option> &l ...
- MySql连接异常解决
这两天遇到一个mysql连接的问题,找人弄了好几天也没弄好,先看一下报错信息: ============================================================ ...
- java简易编辑器
package peng_jun; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...
- 在ProgressBar上加文字----显示百分比的进度条
http://www.cnblogs.com/3dant/archive/2011/04/25/2026776.html
- Spring集成Quartz定时器
<!-- Spring集成Quartz开始 --> <bean id="startQuertz" lazy-init="false" auto ...