热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php设计模式之建造者模式

1模式介绍是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示2.类设计  <?php***建造者模式*copyright(c

1 模式介绍



 是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

2.类设计

php设计模式之建造者模式

 

 

php
 
/** 
 * 建造者模式
 * copyright (c) http://blog.csdn.net/CleverCode   
 */  
 
//需要建造的产品(product)
class Car
{/*{{{*/
    public $name;
    public $engine;//发动机
    public $chassis;//底盘
    public $body;//车身
    public $equipment;//电器设备
 
    public function setName($name)
    {
        $this->name = $name;
    }
 
    public function setEngine($engine)
    {
        $this->engine = $engine;
    }
 
    public function setChassis($chassis)
    {
        $this->chassis = $chassis;
    }
 
    public function setBody($body)
    {
        $this->body = $body;
    }
 
    public function setEquipment($equipment)
    {
        $this->equipment = $equipment;
    }
 
    public function show()
    {
        echo "名称:".$this->name."\r\n";
        echo "引擎:".$this->engine."\r\n";
        echo "底盘:".$this->chassis."\r\n";
        echo "车身:".$this->body."\r\n";
        echo "电子设备:".$this->equipment."\r\n";
 
    }
 
}/*}}}*/
 
//builder
interface IBuilder
{/*{{{*/
    public function builderName();
    public function builderEngine();
    public function builderChassis();
    public function builderBody();
    public function builderEquipment();
    public function getCar();
}/*}}}*/
 
//红旗车builder
class RedBuilder implements IBuilder
{/*{{{*/
    public $car;
 
    public function __construct()
    {
        $this->car = new Car();
    }
 
    public function builderName()
    {
        $this->car->setName('红旗'); 
    }
 
    public function builderEngine()
    {
        $this->car->setEngine('国产发动机'); 
    }
 
    public function builderChassis()
    {
        $this->car->setChassis('超大底盘'); 
    }
 
    public function builderBody()
    {
        $this->car->setBody('超大'); 
    }
    public function builderEquipment()
    {
        $this->car->setEquipment('电子设备'); 
    }
 
    public function getCar()
    {
        return $this->car;
    }
 
}/*}}}*/
 
//QQ车builder
class QQBuilder implements IBuilder
{/*{{{*/
    public $car;
 
    public function __construct()
    {
        $this->car = new Car();
    }
 
    public function builderName()
    {
        $this->car->setName('QQ'); 
    }
 
    public function builderEngine()
    {
        $this->car->setEngine('国产发动机'); 
    }
 
    public function builderChassis()
    {
        $this->car->setChassis('小底盘'); 
    }
 
    public function builderBody()
    {
        $this->car->setBody('小'); 
    }
    public function builderEquipment()
    {
        $this->car->setEquipment('电子设备'); 
    }
 
    public function getCar()
    {
        return $this->car;
    }
}/*}}}*/
 
//组装者(director)
class CarDirector
{/*{{{*/
    public function make(IBuilder $builder)
    {
        $builder->builderName();
        $builder->builderEngine();
        $builder->builderChassis();
        $builder->builderBody();
        $builder->builderEquipment();
        return $builder->getCar();
    }
}/*}}}*/
 
class Client
{/*{{{*/
    public static function main($argv)
    {
        $director = new CarDirector(); 
        $redBuilder = new RedBuilder();
        $car = $director->make($redBuilder);
        $car->show();
 
        echo "\r\n";
        $qqBuilder = new QQBuilder();
        $car = $director->make($qqBuilder);
        $car->show();
    }
}/*}}}*/
Client::main($argv);
?>

 


推荐阅读
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • 本文详细介绍了 Java 中 org.apache.jena.atlas.lib.ByteBufferLib 类下的 acopyArray 方法,并提供了多个实际应用中的代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • IO流——字符流 BufferedReader / BufferedWriter 进行文件读写
    目录节点流、处理流读文件:BufferedReader的使用写文件:BufferedWriter的使用节点流处理流节点流和处理流的区别和联系字符流Buf ... [详细]
  • 本文介绍了如何使用Java实现数组的冒泡排序算法,以及如何利用Scanner类动态给数组赋值并进行数组扩容。文章详细解释了冒泡排序的原理和步骤,并提供了代码示例。 ... [详细]
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
author-avatar
bakurei_492
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有