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

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

     示图代码如下:

    public abstract class Builder {
        public abstract void buildPartA();
        public abstract void buildPartB();
        public abstract Product getResult();
    }
    Builder
    public class ConcreteBuilder extends Builder {
        private Product product = new Product();
    
        @Override
        public void buildPartA() {
            product.add("部件A");
            
        }
    
        @Override
        public void buildPartB() {
            product.add("部件B");
            
        }
    
        @Override
        public Product getResult() {
            return product;
        }
        
        
    }
    ConcreteBuilder
    import java.util.ArrayList;
    import java.util.List;
    
    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 str : parts) {
                System.out.print(str+"	");
            }
        }
    }
    Product
    public class Director {
        public void construct(Builder builder){
            builder.buildPartA();
            builder.buildPartB();
        }
    }
    Director
    public class TestBuilder {
        public static void main(String[] args) {
            Director di = new Director();
            Builder builder = new ConcreteBuilder();
            di.construct(builder);
            Product pr = builder.getResult();
            pr.show();
        }
    }
    
    结果:
    组成部件:    
    部件A    部件B    
    test

    使用场景:

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

    使用好处:

    建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何让组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

  • 相关阅读:
    自动化测试selenium教程
    Java开发.gitignore文件包含.iml,.log的看法
    基于接口设计与编程
    搭建大众点评CAT监控平台
    正确的打日志姿势
    【每天一条Linux指令-Day1】kill掉多个mysql的进程
    一道SQL面试题——表行列数据转换(表转置)
    @SuppressWarnings注解用法详解
    Spring IoC的底层技术支持——Java反射机制
    出现java.lang.NoSuchMethodError错误的原因
  • 原文地址:https://www.cnblogs.com/cai170221/p/13490819.html
Copyright © 2011-2022 走看看