美文网首页
设计模式--建造者模式

设计模式--建造者模式

作者: daoshud1 | 来源:发表于2019-12-04 17:23 被阅读0次

    什么是建造者模式

    又称创造者模式,将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类或重载的方式,动态的创建具复合属性的对象。

    简单解释

    使用创建者模式,用户只需要指定需要建造的类型就可以得到,而不知道具体的建造细节;

    UML类图

    image

    优点

    • 建造者独立,易扩展;
    • 便于细节控制风险;
    • 隐藏了具体的实现过程;

    缺点

    • 产品必须有共同点,范围有限制;
    • 内部变化复杂,会有很多建造类;

    代码解释

    • 以盖房子为例,创建一个产品房子,构建房子的过程
    /**
     * 创建一个产品:房子,构建盖房子的过程
     * @author ws
     * @version 1.0
     */
    public class House {
    
        List<String> parts=new ArrayList<>();
    
        public void Add(String part){
            parts.add(part);
        }
    
        public void show(){
            System.out.println("盖房子开始:");
            for (String part:parts) {
                System.out.println(part);
            }
        }
    }
    
    • 声明盖房子的抽象类,明确盖房子的三个过程
    /**
     * 构建抽象类,声明三个构建过程
     * @author ws
     * @version 1.0
     */
    public abstract class Builder {
        public abstract void builderOne();
    
        public abstract void builderTwo();
    
        public abstract void builderThree();
    
        public abstract House getResult();
    
    }
    
    • 创建一个砖头房的实现类,继承盖房子
    /**
     *砖房
     * @author ws
     * @version 1.0
     */
    public class BrickHouse extends Builder {
        private House house=new House();
        @Override
        public void builderOne() {
            house.Add("打地基");
        }
        @Override
        public void builderTwo() {
            house.Add("砌砖");
        }
        @Override
        public void builderThree() {
            house.Add("上梁");
        }
        @Override
        public House getResult() {
            return house;
        }
    }
    
    
    • 创建一个商砼房的实现类,继承盖房子
    /**
     * 混凝土房
     * @author 1.0
     * @version 1.0
     */
    public class ConcreteHourse extends Builder {
        private House house=new House();
        @Override
        public void builderOne() {
            house.Add("打地基");
        }
        @Override
        public void builderTwo() {
            house.Add("拌混凝土");
        }
        @Override
        public void builderThree() {
            house.Add("浇灌");
        }
        @Override
        public House getResult() {
            return house;
        }
    }
    
    
    • 创建一个工头类,由工头指挥盖房子
    /**
     * 工头指挥盖房子,用来指挥盖房子的过程
     * @author ws
     * @version 1.0
     */
    public class Foreman {
    
        public void construct(Builder builder){
            builder.builderOne();
            builder.builderTwo();
            builder.builderThree();
        }
    
    }
    
    • 测试类
    public static void main(String[] args) {
        Foreman foreman=new Foreman();
        Builder brick=new BrickHouse();
        Builder concrtet=new ConcreteHourse();
        //盖砖房
        foreman.construct(brick);
        House brickHourse=brick.getResult();
        brickHourse.show();
        //盖混凝土房
        foreman.construct(concrtet);
        House concreteHourse=concrtet.getResult();
        concreteHourse.show();
    }
    盖房子开始:
    打地基
    砌砖
    上梁
    盖房子开始:
    打地基
    拌混凝土
    浇灌
    
    

    参照:大话设计模式

    相关文章

      网友评论

          本文标题:设计模式--建造者模式

          本文链接:https://www.haomeiwen.com/subject/fkvlgctx.html