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();
        }
    
    }
  • 相关阅读:
    [ solr入门 ] 在schema.xml中加入自己的分词工具
    SQLServer2005获取大数据集时内存不足的解决办法[转]
    java位操作基本教程[转]
    log4j的最佳实践(转)
    [ lucene扩展 ] "Did you mean" feature with Apache Lucene SpellChecker
    java image filters[02]过滤器初探
    PHP serialize 和 JSON 解析与区别
    js 实现 静态缓存页面中访问动态IP下载地址
    smarty section foreach遍历多维数组
    【转】window.open 参数
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7077618.html
Copyright © 2011-2022 走看看