热门标签 | 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);
?>

 


推荐阅读
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
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社区 版权所有