• 建造者模式


    1.使用场景:建造一个复杂的产品。

    2.建造者模式的本质:分离了对象子组件 单独构造,从而造出复杂的对象。由于实现了构建和装配的的解耦。不同建造者,相同的装配,也可以做出不同的对象。

    3.使用案例解释:

     案例概述:我们建造汽车,汽车有桌椅、轮胎和方向盘组成,我们将他们组装成汽车。

    (1)首先从车入手,他需要桌椅、轮胎和方向盘。

    package ke.test.gzz;
    
    /*
     * 创建汽车
     * 我们需要轮胎座椅和方向盘
     * 
     */
    
    public class Car {
        private FangXpan fangXpan;
        private Zhuoyi zhuoyi;
        private LunTai lunTai;
        public FangXpan getFangXpan() {
            return fangXpan;
        }
        public void setFangXpan(FangXpan fangXpan) {
            this.fangXpan = fangXpan;
        }
        public Zhuoyi getZhuoyi() {
            return zhuoyi;
        }
        public void setZhuoyi(Zhuoyi zhuoyi) {
            this.zhuoyi = zhuoyi;
        }
        public LunTai getLunTai() {
            return lunTai;
        }
        public void setLunTai(LunTai lunTai) {
            this.lunTai = lunTai;
        }
    }

    我们使用了方向盘等组件,这个时候我们创建出各个组件

    轮胎类:

    package ke.test.gzz;
    /*
    轮胎类
    */
    public class LunTai { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public LunTai(String name) { this.name = name; } }

    桌椅类:

    package ke.test.gzz;
    
    public class Zhuoyi {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public Zhuoyi(String name)
        {
            this.name =name;
        }
    
    }

    方向盘类:

    package ke.test.gzz;
    
    public class FangXpan {
        private String name ;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        public FangXpan(String name) {
            this.name = name;
            
        }
    }

    (2)我们已经知道了自己想要啥,我们可以将他们创建出来,并且是需要啥,创建啥。

    package ke.test.gzz;
    
    public interface CarBuilder {
        public FangXpan fangXpan();
        public LunTai lunTai();
        public Zhuoyi zhuoyi();
    }

    我们创建出的东西需要组装

    package ke.test.gzz;
    
    public interface  CarDirect {
        Car createCar();
    
    }

    (3)实现各个方法创建具体的组件,将图纸变为实物。

    package ke.test.gzz;
    
    public class KwCarBuilder implements CarBuilder {
    
        @Override
        public FangXpan fangXpan() {
            // TODO Auto-generated method stub
            return new FangXpan("kwtest");
        }
    
        @Override
        public LunTai lunTai() {
            // TODO Auto-generated method stub
            return new LunTai("kwluntai");
        }
    
        @Override
        public Zhuoyi zhuoyi() {
            // TODO Auto-generated method stub
            return new Zhuoyi("kwzhuoyi"); 
        }
    
    }

    (4)实物有了按照图纸将其变为汽车

    package ke.test.gzz;
    
    public class KwCarDirect implements CarDirect{
    
        private CarBuilder carBuilder;
        
        public void setCarBuilder(CarBuilder carBuilder) {
            carBuilder = carBuilder;
        }
    
        @Override
        public Car createCar() {
            // TODO Auto-generated method stub
            Zhuoyi zhuoyi = carBuilder.zhuoyi();
            FangXpan fangXpan = carBuilder.fangXpan();
            LunTai lunTai = carBuilder.lunTai();
            
            Car car= new Car();
            car.setFangXpan(fangXpan);
            car.setLunTai(lunTai);
            car.setZhuoyi(zhuoyi);
            
            return car;
        }
    
    }

    我们这个时候就将需要的实体创建出来了,上面的逻辑也是写代码的逻辑。

  • 相关阅读:
    zend studio常见问题解答
    瀑布流插件(jquery.masonry.js)
    仿jQuery中undelegate()方法功能的函数
    Linux 常用命令
    linux debugfs 找回rm 的文件
    jq 添加和移除样式
    CentOS 搭建 nginx python django web server
    Linux vim 配置文件
    CentOS 安装python 3.3.2
    login.defs和shadow文件区别
  • 原文地址:https://www.cnblogs.com/kw28188151/p/8575089.html
Copyright © 2020-2023  润新知