zoukankan      html  css  js  c++  java
  • 设计模式9:建造者模式

    建造者模式用来将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

    主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定

    UML图:

    我们希望获得拥有不同组件的Product,这时我们使用建造者模式,ConcreteBuilder1、2使用相同的接口,为Product加入不同组件。

    Director类控制组装过程,最后返回Product实例。

    代码:

    Product类:

    import java.util.ArrayList;
    import java.util.List;
    
    public class Product {
    	
    	private List<String> parts = new ArrayList<>();
    	
    	public void add(String s) {
    		parts.add(s);
    	}
    	
    	public void show() {
    		for (String s: parts){
    			System.out.println(s);
    		}
    	}
    }
    

    Builder类及其子类:

    public abstract class Builder {
    	
    	protected Product product = new Product();
    	
    	public abstract void buildPartA();
    	
    	public abstract void buildPartB();
    	
    	public Product getResult() {
    		return product;
    	}
    	
    }
    
    public class ConcreteBuilder1 extends Builder {
    
    	@Override
    	public void buildPartA() {
    		product.add("part A");
    	}
    
    	@Override
    	public void buildPartB() {
    		product.add("part B");
    	}
    
    }
    
    public class ConcreteBuilder2 extends Builder {
    
    	@Override
    	public void buildPartA() {
    		product.add("part X");
    	}
    
    	@Override
    	public void buildPartB() {
    		product.add("part Y");
    	}
    
    }
    

    Director类:

    public class Director {
    	
    	private Builder builder = null;
    	
    	public Director(Builder builder) {
    		this.builder = builder;
    	}
    	
    	public Product getProduct(){
    		builder.buildPartA();
    		builder.buildPartB();
    		return builder.getResult();
    	}
    }
    

    Demo:

    public class BuilderDemo {
    	public static void main(String[] args) {
    		Builder c1 = new ConcreteBuilder1();
    		Director d1 = new Director(c1);
    		Product p1 = d1.getProduct();
    		p1.show();
    		
    		Builder c2 = new ConcreteBuilder2();
    		Director d2 = new Director(c2);
    		Product p2 = d2.getProduct();
    		p2.show();
    	}
    }
    

      

  • 相关阅读:
    C#WinForm应用程序中嵌入ECharts图表
    C#自定义按钮、自定义WinForm无边框窗体、自定义MessageBox窗体
    C#自定义无边框MessageBox窗体
    C#自定义Winform无边框窗体
    C#自定义Button按钮控件
    C# 对象与JSON字符串互相转换的三种方式
    Spring.NET依赖注入框架学习--实例化容器常用方法
    Spring.NET依赖注入框架学习--简单对象注入
    Spring.NET依赖注入框架学习--简介
    Spring.NET依赖注入框架学习--入门
  • 原文地址:https://www.cnblogs.com/zcy-backend/p/6690496.html
Copyright © 2011-2022 走看看