zoukankan      html  css  js  c++  java
  • 建造者模式-结构比较简明

    <?php
    
    /*规范制造各个零件的接口*/
    interface Builder
    {
        public function buildMapPart();//制造地图零件
        public function buildBuildingPart();//制造建筑零件
        public function buildArmyPart();//制造部队零件
        public function getResult();//组装零件
    }
    
    
    /*实际建造器类,比如初始化某个任务关*/
    class ConcreteBuilder implements Builder
    {
    
        public function buildMapPart()      //制造地图-零件
        {
            echo '地图零件
    ';
        }
        public function buildBuildingPart()    //制造建筑-零件
        {
            echo '建筑零件
    ';
        }
        public function buildArmyPart()   //制造部队-零件
        {
            echo '部队零件
    ';
        }
        public function getResult()    //组装零件-成为成品
        {
            echo '组装零件
    ';
        }
    }
    
    //实际建造类,建造另一种场景
    class GaoyuanBuilder implements Builder
    {
        public function buildMapPart()
        {
            echo '2号高原地图';
        }
        public function buildBuildingPart()
        {
            echo '防风碉堡';
        }
        public function buildArmyPart()
        {
            echo '机械化步兵';
        }
        public function getResult()
        {
            echo '组装零件:高原地图+碉堡+机械化步兵!';
        }
    }
    
    
    
    //监督类,也就是控制绘制流程的类
    class Director
    {
        private $builder;//私有属性,确定使用的建造器
        //构造方法,参数为选定的建造器对象
        public function __construct($builder)
        {
            //确定使用的建造器
            $this->builder = $builder;
        }
        //负责建造流程的方法,调用建造器对象的方法,制造所有零件
        public function buildeAllPart()
        {
            //制造地图零件
            $this->builder->buildMapPart();
            //制造建筑零件
            $this->builder->buildBuildingPart();
            //制造部队零件
            $this->builder->buildArmyPart();
        }
    }
    
    $concreteBuilder = new ConcreteBuilder();//假设根据任务关,初始化我们需要的实际建造器对象
    $director = new Director($concreteBuilder);//初始化一个监督对象
    $director->buildeAllPart();//制造所有零件
    $concreteBuilder->getResult();//最后让建造器组装零件,生成画面
    
    //建造另一种场景
    $gaoyuanBuilder = new GaoyuanBuilder();//假设根据任务关,初始化我们需要的实际建造器对象
    $director = new Director($gaoyuanBuilder);//初始化一个监督对象
    $director->buildeAllPart();//制造所有零件
    $gaoyuanBuilder->getResult();//最后让建造器组装零件,生成画面
    
    ?>
    用途总结:建造器模式可以将流程和细节分离,各司其职。
    
    实现总结:需要一个建造器接口或者抽象类,负责规范各个方法,比如上面的Builder。然后让实际的建造器类去实现所有的方法,比如上面的ConcreteBuilder。同时需要负责流程管理的监督类,比如上面的Director,负责调用建造器的各个零件制造方法。最后让建造器去组装所有的零件。

    主要是在于建造各个不同的东西时,方便。比如建造地图,士兵,建造???还不懂
  • 相关阅读:
    c.vim
    Ubuntu18.04重装指南
    [TJOI2017]城市 【树的直径+暴力+优化】
    [Bzoj3696]化合物【暴力+树形Dp】
    [JLOI2015]战争调度【暴力+树形Dp】
    [Bzoj3743][Coci2015] Kamp【换根Dp】
    [POI2017]Sabota【观察+树形Dp】
    [CQOI2009]叶子的染色【性质+树形Dp】
    COCI2014/2015 Contest#1 D MAFIJA【基环树最大独立点集】
    [牛客网] 推箱子【离散,线段树区间覆盖】
  • 原文地址:https://www.cnblogs.com/jiufen/p/4994719.html
Copyright © 2011-2022 走看看