zoukankan      html  css  js  c++  java
  • 创建者模式

    /**
     * 建造者模式:一般用于复杂的对象创建,例如一个对象的多个属性都是对象,或者对象的属性太多,使用构造器初始化,参数太长,容易写错哪个参数是什么意思
     * 角色:产品--产品创建者--指挥者
     * 产品:如自行车:包含坐垫,轮胎等
     * 创建者:组装自行车:步骤组装坐垫,组装轮胎,最后返回产品对象
     * 指挥者:创建者组装坐垫,轮胎等,至少要有个先后顺序吧,先组装哪个,接着组装哪个
     * 下面的例子以生产自行车为例,自行车有坐垫和轮胎2个对象,分别使用不同的创建者组装相应的自行车(摩拜和小蓝)
     *
     *
     */
    
    //行车车对象
    public class Bike {
        private ISeat seat; //坐垫对象
        private Ityre ityre; //轮胎对象
    
        public ISeat getSeat() {
            return seat;
        }
    
        public void setSeat(ISeat seat) {
            this.seat = seat;
        }
    
        public Ityre getItyre() {
            return ityre;
        }
    
        public void setItyre(Ityre ityre) {
            this.ityre = ityre;
        }
    }
    //坐垫接口
    public interface ISeat {
        void seat();
    }
    //黑色的坐垫
    public class BlackSeat implements ISeat {
        @Override
        public void seat() {
            System.out.println("这是黑色的坐垫");
        }
    }
    //灰色的坐垫
    public class GreySeat implements ISeat {
        @Override
        public void seat() {
            System.out.println("这是灰色的坐垫");
        }
    }
    //轮胎接口
    public interface Ityre {
        void tyre();
    }
    //大轮胎
    public class BigTyre implements Ityre {
        @Override
        public void tyre() {
            System.out.println("这是大的轮胎");
        }
    }
    //小轮胎
    public class SmallTyre implements Ityre {
        @Override
        public void tyre() {
            System.out.println("这是小的轮胎");
        }
    }
    //自行车组装接口
    public interface BikeBuilder{
        void buildSeat();//组装坐垫
        void buildTyre();//组装轮胎
        Bike createBike();//组装好的自行车
    }
    //摩拜自行车组装者
    public class MobikeBuilder implements BikeBuilder {
        private Bike bike=new Bike();
        @Override
        public void buildSeat() {
            bike.setSeat(new BlackSeat());
        } //黑色的坐垫
    
        @Override
        public void buildTyre() {
            bike.setItyre(new BigTyre());
        }//大的轮胎
    
        @Override
        public Bike createBike() {
            return bike; //组装好的自行车
        }
    }
    //小蓝自行车组装者
    public class BlugogoBikeBuilder implements BikeBuilder {
        private Bike bike=new Bike();
        @Override
        public void buildSeat() {
            bike.setSeat(new GreySeat());
        } //灰色的坐垫
    
        @Override
        public void buildTyre() {
            bike.setItyre(new SmallTyre());
        }//小的轮胎
    
        @Override
        public Bike createBike() {
            return bike;
        }
    }
    //指挥者,安排组装的顺序,(指挥者也可以省略,将其代码合并到创建者中)
    public class Director {
        private BikeBuilder bikeBuilder;
    
        public Director(BikeBuilder bikeBuilder) {
            this.bikeBuilder = bikeBuilder;
        }
        public Bike builBike(){
            bikeBuilder.buildSeat();//先组装坐垫
            bikeBuilder.buildTyre();//后组装轮胎
            return bikeBuilder.createBike();//最后才返回组装的对象
        }
    }
    
    //测试
    public class Test {
        public static void main(String[] args) {
            //创建摩拜自行车
            Director director = new Director(new MobikeBuilder());
            Bike bike = director.builBike();
            bike.getItyre().tyre();
            bike.getSeat().seat();
            //创建小蓝自行车
            Director director2 = new Director(new BlugogoBikeBuilder());
            director2.builBike().getSeat().seat();
            director2.builBike().getItyre().tyre();
        }
    }
  • 相关阅读:
    二叉树的最大距离
    MS CRM 2011 RibbonExport Utility下载以及实用说明
    MS CRM 2011中的解决方案——使用
    MS CRM 2011的自定义与开发(5)——关系编辑器
    MS CRM 2011 RC中的新特性(5)——定期约会
    MS CRM2011中的事件脚本——入门
    MS CRM 2011 汇总更新 3
    MS CRM 4中模拟PartyList字段的方法
    MS CRM 2011的自定义与开发(4)——属性编辑器
    MS CRM 2011中的解决方案Solution_简介
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/10907789.html
Copyright © 2011-2022 走看看