• linkin大话设计模式--建造模式


    linkin大话设计模式--建造模式


    建造模式是对象的创建模式,可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。


    建造模式的结构:

    抽象建造者角色(Builder):给出一个抽象的接口,用来规范产品对象的各个组成成分的建造。

    具体建造者角色(ConcreteBuilder):

    1.实现抽象建造者所申明的接口,给出一步一步地完成创建产品实例的操作。

    2.在建造过程完成后,提供产品的实例。

    导演者角色(Director):用来调用具体建造者以创建产品对象。

    产品角色(Product):要建造的对象。


    在什么情况下使用建造模式?个人觉得有点绕,没有多少体会。。。
    1.需要生成的产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以仅仅是一个对象的一个组成成分。
    2.需要生成的产品对象的属性互相依赖。
    3.在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品的创建过程中不易得到。

    代码如下:

    public class MyCarTest {
        public static void main(String[] args) {
            //建造模式  指定一个导演 然后创建出不同的产品
            Director d=new Director();
            Car car=d.buildCar();
            System.out.println(car);
            Train train=d.buildTrain();
            System.out.println(train);
        }
    
    }
    
    //导演者角色 直接暴露给客户端创建自己的产品
    class Director {
        private BuildeCar bc=new BuilderCar();
        private BuildeTrain bt=new BuilderTrain();
        //命令造汽车
        public Car buildCar(){
            bc.carPart1();
            bc.carPart2();
            bc.carPart3();
            Car car=bc.carOver();
            return car;
        }
        
        //命令造火车
        public Train buildTrain(){
            bt.trainPart();
            bt.loco();
            Train train=bt.trainOver();
            return train;
        }
        
    }
    
    //对火车来说 抽象建造者角色接口
    interface BuildeTrain{
        
        public void trainPart();
        public void loco();
        public Train trainOver();
    }
    
    //对汽车来说 抽象建造者角色接口
    interface BuildeCar{
      
        public abstract void carPart1();
        public abstract void carPart2();
        public abstract void carPart3();
        public abstract Car carOver();
    }
    
    class BuilderTrain implements BuildeTrain{
        private Train train=new Train();
        public  void trainPart(){
            System.out.println("火车的车厢造好了...");
        }
        public  void loco(){
            System.out.println("火车头造好了...");
        }
        public  Train trainOver(){
            return train;
        }
    }
    
    class BuilderCar implements BuildeCar{
        private Car car=new Car();
        public void carPart1(){
            System.out.println("汽车的框架完成了...");
        }
        public void carPart2(){
            System.out.println("汽车的底盘完成了...");
        }
        public void carPart3(){
            System.out.println("汽车的轮胎完成了...");
        }
        public Car carOver(){
            return car;
        }
    }
    
    class Car {
        public String toString (){
            return "汽车产品...";
        }
    }
    
    class Train {
        public String toString(){
            return"火车产品...";
        }
    }
    

  • 相关阅读:
    triplet loss 在深度学习中主要应用在什么地方?有什么明显的优势?
    一个评测指标就是MAP(Mean Average Precision)平均精度均值。
    机器学习术语中英对照表
    logistic softmax
    mysql导出导入sql文件方法(linux)
    mysql分区表
    matplotlib安装错误依赖问题解决
    linux命令集合
    linux下安装或升级GCC4.8.2,以支持C++11标准[转]
    linux 如何显示一个文件的某几行(中间几行)
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233183.html
Copyright © 2020-2023  润新知