• 建造者模式


    一、建造者模式

    当需要创建一些复杂的对象,而且这些对象当中的内部建造顺序稳定的时候,就可以使用建造者模式。

    即是将一个复杂对象的构造与表示分离,使得同样的构建过程可以创建不同的表示,提了依赖倒转原则,细节依赖于抽象。

    二、结构图

    Product是具体产品;

    Builder是为创建一个Product对象的各个部件指定的抽象接口;

    而ConcreteBuilder则是具体的建造者,实现Builder接口,实现各个部件构造的细节,构造和装配各个部件;

    Director充当一个指挥的角色,根据客户需要构建一个使用Bilder接口的对象。

     三、示例

    import java.util.ArrayList;
    import java.util.List;
    
    //产品类,由多个部件构成
    class Product{
        List<String> parts=new ArrayList<>();
        //添加产品部件
        public void add(String content){
            parts.add(content);
        }
        public void show(){
            System.out.println("创建的产品:");
            for (String content:parts) {
                System.out.println(content);
            }
        }
    }
    
    //Builder类,抽象建造者,确定产品由什么部件组成,
    interface Builder{
        void buildPartA();
        void buildPartB();
        Product getResult();
    }
    
    //ConcreteBuilder类是具体建造者
    class ConcreteBuilderOne implements Builder{
        private Product product=new Product();
        @Override
        public void buildPartA() {
            product.add("one的部件A");
        }
    
        @Override
        public void buildPartB() {
            product.add("one的部件B");
        }
    
        @Override
        public Product getResult() {
            return product;
        }
    }
    
    class ConcreteBuilderTwo implements Builder{
        private Product product=new Product();
        @Override
        public void buildPartA() {
            product.add("two的部件A");
        }
    
        @Override
        public void buildPartB() {
            product.add("two的部件B");
        }
    
        @Override
        public Product getResult() {
            return product;
        }
    }
    
    //Director类是指挥者,指挥建造过程
    class Director{
        public void construct(Builder builder){
            builder.buildPartA();
            builder.buildPartB();
        }
    }
    
    public class BuilderPattern {
        public static void main(String[] args) {
            //最后,客户无需知道具体的建造过程
            Director director=new Director();
            Builder concreteBuilderOne=new ConcreteBuilderOne();
            Builder concreteBuilderTwo=new ConcreteBuilderTwo();
    
            director.construct(concreteBuilderOne);
            Product productOne=concreteBuilderOne.getResult();
            productOne.show();
    
            director.construct(concreteBuilderTwo);
            Product productTwo=concreteBuilderTwo.getResult();
            productTwo.show();
        }
    }

    输出结果:

    菜甜二的学习笔记and总结啊。。。总会遇到挫折,可是还是要保持开阔的心态才能开心的学习啊,坚持吧。
  • 相关阅读:
    【codeforces 755A】PolandBall and Hypothesis
    【codeforces 755B】PolandBall and Game
    【codeforces 755C】PolandBall and Forest
    Enhancing network controls in mandatory access control computing environments
    NPM 使用介绍
    【oracle】首次启动SQL Developer配置java.exe出错(Could not find jvm.cfg! )
    day70-oracle PLSQL_02光标
    day69-oracle 22-DBCA
    day70-oracle 12-Java调用存储过程和存储函数
    day17 16.关于sql注入与PreparedStatement介绍
  • 原文地址:https://www.cnblogs.com/chen-ying/p/11255812.html
Copyright © 2020-2023  润新知