• 大话设计模式读书笔记(十) 建造者模式


    建造者模式

    建造者模式(Builder):

    将一个复杂对象的构建与他的表示分离,使同样的构建过程可以创建不同的表示。

    建造者模式UMl类图:




    建造者模式简单代码实现:

    具体产品类
    public class Product {
    	//产品部件
    	private List<String> parts = new ArrayList<String>();
    	//添加产品部件
    	public void addPart(String part){
    		parts.add(part);
    	}
    	public void show(){
    		System.out.println("
    产品   创建---");
    		for (String part : parts) {
    			System.out.println(part);
    		}
    	}
    }
    建造者接口

    public interface Builder {
    	public void buildPartA();
    	public void buildPartB();
    	
    	public Product getResult();
    }
    

    建造者接口实现
    public class ConcreteBuilder implements Builder{
    	private Product product= new Product();
    	@Override
    	public void buildPartA() {
    		product.addPart("部件A");
    	}
    	@Override
    	public void buildPartB() {
    		product.addPart("部件B");
    	}
    	@Override
    	public Product getResult() {
    		return product;
    	}
    }
    
    
    public class ConcreteBuilder2 implements Builder{
    	private Product product= new Product();
    	@Override
    	public void buildPartA() {
    		product.addPart("部件X");
    	}
    	@Override
    	public void buildPartB() {
    		product.addPart("部件Y");
    	}
    	@Override
    	public Product getResult() {
    		return product;
    	}
    }
    

    指挥者类
    public class Director {
    	public void construct(Builder builder){
    		builder.buildPartB();
    		builder.buildPartA();
    	}
    }
    
    主方法
    public class Mian {
    	public static void main(String[] args) {
    		Director director = new Director();
    		Builder b1= new ConcreteBuilder();
    		Builder b2= new ConcreteBuilder2();
    		director.construct(b1);
    		Product p = b1.getResult();
    		p.show();
    		
    		director.construct(b2);
    		Product p2 = b2.getResult();
    		p2.show();
    	}
    }
    

    建造者模式与工厂模式的比较:

    建造者模式的结构中引入了一个指挥者类Director,该类的作用主要有两个:
    一、它隔离客户与生产过程;
    二、它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,无须关心产品对象的具体组装过程,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。

    建造者模式与抽象工厂模式的比较:
    与抽象工厂模式相比, 建造者模式返回一个组装好的完整产品 ,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
    在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而在建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整的对象。
    如果将抽象工厂模式看成汽车配件生产工厂 ,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂 ,通过对部件的组装可以返回一辆完整的汽车。



  • 相关阅读:
    线程基础知识归纳
    并发编程情况下几个相应问题简介
    Spring Security的RBAC数据模型嵌入
    Mysql插入中文的字段内容时乱码的解决方法
    部分排序算法总结
    sendEmail 阿里云使用587端口
    linux服务器关闭ipv6 方法
    centos 6.8 安装git 报错
    强大的xargs
    nfs环境搭建报错clnt_create: RPC: Program not registered
  • 原文地址:https://www.cnblogs.com/xsyfl/p/6842512.html
Copyright © 2020-2023  润新知