• 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"火车产品...";
        }
    }
    

  • 相关阅读:
    lncRNA表达定量方法评估
    比对软件之STAR的使用方法
    怎么检测自己fastq的Phred类型 | phred33 phred64
    质控工具之TrimGalore使用方法
    怎么从bam文件中提取出比对OR没比对上的paired reads | bamToFastq | STAR
    RepBaseRepeatMaskerEdition下载 | RepeatMasker
    Nr,GenBank, RefSeq, UniProt 数据库的异同
    质控工具之cutadapt的使用方法
    初步了解hg19注释文件的内容 | gtf
    单细胞数据高级分析之消除细胞周期因素 | Removal of cell cycle effect
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233183.html
Copyright © 2020-2023  润新知