zoukankan      html  css  js  c++  java
  • 建造者模式

    <?php
    /**
     * 建造者模式
     * -------------
     * @author         zhaoxuejie <zxj198468@gmail.com>
     * @package     design pattern
     * @version     v1.0 2011-12-14
     */
    
    /*产品角色-在指导者的指导下由建造者所创建的那个复杂的对象*/
    class Person
    {
        private $head;
        private $body;
        private $foot;
        //
        public function getHead()
        {
            return $this->head;
        }
        public function setHead($head)
        {
            $this->head = $head;
        }
    
        //
        public function getBody()
        {
            return $this->body;
        }
        public function setBody($body)
        {
            $this->body = $body;
        }
    
        //
        public function getFoot()
        {
            return $this->foot;
        }
        public function setFoot($foot)
        {
            $this->foot = $foot;
        }
    }
    
    /*抽象建造者-创建一个product对象的各个部件指定抽象接口*/
    interface PersonBuilder
    {
    
        public function buildHead();
        public function buildBody();
        public function buildFoot();
        public function getResult();//产品返还方法
    }
    
    /*具体建造者-实现接口*/
    class ConcreteBuilder implements PersonBuilder
    {
        private $person;
    
        function __construct()
        {
            $this->person = new Person();
        }
    
        function buildHead()
        {
            $this->person->setHead('建造头……');
        }
    
        function buildBody()
        {
            $this->person->setBody('建造身体……');
        }
    
        function buildFoot()
        {
            $this->person->setFoot('建造脚……');
        }
    
        function getResult()
        {
            return $this->person;
        }
    }
    
    /*导演者-指导者导演者角色与客户端直接打交道,它理解客户端的业务逻辑,
    将客户端创建产品的请求拆分成对产品组成部分的请求,
    然后调用具体产品角色执行建造操作。它分离了客户端与具体建造者
    */
    class Director
    {
        public function __construct(ConcreteBuilder $builder)
        {
            $builder->buildHead();
            $builder->buildBody();
            $builder->buildFoot();
        }
    }
    
    /*客户端*/
    class Client
    {
        public static function main()
        {
            $builder = new ConcreteBuilder();
            $director = new Director($builder);
            $person = $builder->getResult();
            echo $person->getHead();
            echo $person->getBody();
            echo $person->getFoot();
        }
    }
    
    Client::main();
    
    ?>
  • 相关阅读:
    Centos 5.5+PHP5 添加phpjavabrige
    Google /Baidu Ping服务快速收录php
    基站一些信息
    搜索引擎提交入口收集
    druid简单教程
    http关于application/xwwwformurlencoded等字符编码的解释说明
    对比.NET PetShop和Duwamish来探讨Ado.NET的数据库编程模式。
    WinForm RTF生成器
    在 Visual C# .NET 中跟踪和调试
    c#中构建异常处理
  • 原文地址:https://www.cnblogs.com/jiufen/p/4994478.html
Copyright © 2011-2022 走看看