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();
        }
    
    }
  • 相关阅读:
    Eclipse安装aptana
    mysql获取下一篇和上一篇文章的ID
    Java回顾之Spring基础
    纯CSS实现各类气球泡泡对话框效果
    百度编辑器ueditor的简单使用
    实施接口
    Java快速教程
    Java GUI程序设计
    JAVA之关于This的用法
    Java 数组基础
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7077618.html
Copyright © 2011-2022 走看看