zoukankan      html  css  js  c++  java
  • 建造者模式以及php实现

    建造者模式:
      造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

      建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。

    目的:
      消除其他对象复杂的创建过程
    建造者模式包含如下角色:
      1.产品角色,产品角色定义自身的组成属性
      2.抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品
      3.具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义
      4.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品

    UML图:

     ../_images/Builder.jpg 

    //代码实现:

    <?php
    class People{
        public $head;
        public $body;
        
        //不太此类中直接给属性赋值
        function __construct(){
    
        }
    }
    
    //定义具备建造者所需实现的方法
    abstract class PeopleBuilder{
        abstract function buildHead();
        abstract function buildBody();
    }
    
    //具体建造类实现具体业务
    class ChildBuilder extends PeopleBuilder{
        private $people;
        function __construct(){
            $this->people = new people;
        }
    
        function buildHead(){
           echo "this is a child's head!";
        }
        function buildBody(){
           echo "this is a child's body!";
        }
        function returnResult(){
           return $this->people;
        }
    }
    
    class AdultBuilder extends PeopleBuilder{
        private $people;
        function __construct(){
            $this->people = new people;
        }
    
        function buildHead(){
           echo "this is a adult's head!";
        }
        function buildBody(){
           echo "this is a adult's body!";
        }
        function returnResult(){
           return $this->people;
        }
    }
    
    //指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品
    class Director{
        function __construct(Peoplebuilder $builder){
            $builder->buildHead();
            $builder->buildBody(); 
        }
    }
    
    
    //测试
    $builder = new AdultBuilder();  
    $director = new Director($builder);  
    $person = $builder->returnResult(); 
    //this is a adult's head! this is a adult's body!
    ?>

     优点:
      建造者模式可以很好的将一个对象的实现与相关的“业务”逻辑分离开来,从而可以在不改变事件逻辑的前提下,使增加(或改变)实现变得非常容易。
    缺点:
      建造者接口的修改会导致所有执行类的修改。
    适用场景:
      1、 需要生成的产品对象有复杂的内部结构。
      2、 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
      3、 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过 程中不易得到。
    使用建造者模式主要有以下效果:
      1、 建造者模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客 户端不必知道产品内部组成的细节。
      2、 每一个Builder都相对独立,而与其它的Builder无关。
      3、 模式所建造的最终产品更易于控制。

  • 相关阅读:
    本地项目上传到github
    linux 常用命令
    mysql 查询日志基本操作
    js 短信60秒倒计时
    windows下 mysql 移库
    INSERT INTO table(xxx) VALUES (xxx)
    springboot 项目接口调用失败
    P1093 奖学金
    P1403约数研究
    P1147连续自然数和
  • 原文地址:https://www.cnblogs.com/yujon/p/5532853.html
Copyright © 2011-2022 走看看