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

    建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。

    建造者模式:主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的。

    Product类

    package builder;
    
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 具体产品,由多个部件组成
     * @author 煞笔
     *
     */
    public class Product {
        List<String> parts = new ArrayList<String>();
        public void add(String part){
            parts.add(part);
        }
        public void show(){
            System.out.println("产品创建开始。。。");
            for(String part:parts){
                System.out.println(part);
            }
        }
    }

    Builder类

    package builder;
    /**
     * 抽象建造者,确定产品由两个部件PartA,PartB组成
     * @author 煞笔
     *
     */
    public abstract class Builder {
        public abstract void addPartA();
        
        public abstract void addPartB();
        
        public abstract Product getResult();
    }

    ConcreteBuilderA类

    package builder;
    /**
     * 具体建造者A
     * @author 煞笔
     *
     */
    public class ConcreteBuilderA extends Builder {
        private Product product = new Product();
    
        @Override
        public void addPartA() {
            product.add("部件A");
        }
    
        @Override
        public void addPartB() {
            product.add("部件B");
        }
    
        @Override
        public Product getResult() {
            return product;
        }
    
    }

    ConcreteBuilderB类

    package builder;
    /**
     * 具体建造者B
     * @author 煞笔
     *
     */
    public class ConcreteBuilderB extends Builder {
        
        private Product product = new Product();
        
        @Override
        public void addPartA() {
            product.add("部件X");
        }
    
        @Override
        public void addPartB() {
            product.add("部件Y");
        }
    
        @Override
        public Product getResult() {
            return product;
        }
    
    }

    Director类

    package builder;
    /**
     * 指挥者,确定部件建造过程
     * @author 煞笔
     *
     */
    public class Director {
        public void Constrct(Builder builder){
            /*System.out.println("建造顺序1");
            builder.addPartB();
            builder.addPartA();*/
            System.out.println("建造顺序2");
            builder.addPartA();
            builder.addPartB();
        }
    }

    Business类

    package builder;
    
    public class Business {
    
        public static void main(String[] args) {
            Director director = new Director();
            Builder builderA = new ConcreteBuilderA();
            Builder builderB = new ConcreteBuilderB();
            director.Constrct(builderA);
            Product p1 = builderA.getResult();
            p1.show();
            
            director.Constrct(builderB);
            Product p2 = builderB.getResult();
            p2.show();
        }
    
    }
  • 相关阅读:
    多维数据查询OLAP及MDX语言笔记整理
    家庭记账本第三次开发
    家庭记账本第二次
    家庭记账本第一次
    使用Postman工具做接口测试(四)——参数化、执行用例与生成测试报告(完结篇)
    使用Postman工具做接口测试(三)——断言与参数提取
    使用Postman工具做基本测试(二)环境变量和请求参数格式
    使用Postman工具做接口测试(一)安装基本功能介绍和简单使用
    <unittest>
    $(document).on和$('#idname').on和$(function(){ })区别
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7077618.html
Copyright © 2011-2022 走看看