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

    一、建造者模式

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

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

    二、结构图

    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总结啊。。。总会遇到挫折,可是还是要保持开阔的心态才能开心的学习啊,坚持吧。
  • 相关阅读:
    忘记oracle的sys用户密码怎么修改
    C语言 给字符数组赋值的方法
    linux编译中的常见问题
    Ubuntu下查看linux版本,内核版本,系统位数,gcc版本
    Win7中打开chm文件内容无法显示问题
    exit()与_exit()函数的区别(Linux系统中)
    【BZOJ3456】城市规划(生成函数,多项式运算)
    【BZOJ3028】食物(生成函数)
    【CF438E】The Child and Binary Tree(多项式运算,生成函数)
    【BZOJ3771】Triple(生成函数,多项式运算)
  • 原文地址:https://www.cnblogs.com/chen-ying/p/11255812.html
Copyright © 2011-2022 走看看