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

    建造者模式使用场景:将复杂的实现与应用进行分离。主要有四个类:产品类(Product)、建造抽象类(Builder)、建造实现类(ConcreteBuilder)、指挥者类(Director)。建造者模式仅仅只比工厂模式多了一个“指挥类”的角色。在建造者模式图中,假如把这个指挥类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——指挥类。

    产品类

    package build;
    
    public class Product {
    	private String food;
    	private String water;
    	public Product() {
    	}
    	public Product(String food, String water) {
    		this.food = food;
    		this.water = water;
    	}
    	public String getFood() {
    		return food;
    	}
    	public void setFood(String food) {
    		this.food = food;
    	}
    	public String getWater() {
    		return water;
    	}
    	public void setWater(String water) {
    		this.water = water;
    	}
    
    }
    

     

    抽象建造者类:这个类中有抽象的产品建造方法和抽象的产品返回方法

    package build;
    
    public interface Builder {
    	public void  eat();
    	public void drink();
    	public Product getProduct();
    }
    

     

    具体建造者类

    package build;
    
    public class ConcreteBuilder implements Builder{
    	Product product=new Product();
    
    	@Override
    	public void eat() {
    		product.setFood("面包");
    	}
    
    	@Override
    	public void drink() {
    		product.setWater("依云矿泉水");
    	}
    
    	@Override
    	public Product getProduct() {
    		return product;
    	}
    
    }
    

    指挥者类:构建一个使用Builder接口的对象, 负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

    package build;
    
    public class Director {
    	private Builder builder;
    	//传入构建对象
    	public Director(Builder builder){
    		this.builder=builder;
    	}
    	//实现构建
    	public void construct(){
    		this.builder.eat();
    		this.builder.drink();
    	}
    
    }
    

    客户端类测试

    package build;
    
    public class Client {
    	public static void main(String[] args) {
    		//创建实例
    		Builder builder=new ConcreteBuilder();
    		//传入实例
    		Director director=new Director(builder);
    		//构建
    		director.construct();
    		//获取产品
    		Product product=builder.getProduct();
    		//获取结果
    		System.out.println(product.getFood());
    		System.out.println(product.getWater());
    	}
    	
    
    }
    

     

    结果

    面包
    依云矿泉水
    
  • 相关阅读:
    创建窗体不抢夺焦点的方法
    控件绘制的四种方法
    ATL CAxWindow类创建问题一则
    PE文件版本那些事儿
    GDIPlus非典型误用一例
    stl 常用代码
    For each loop in Native C++
    win7 64 下 VS2008 调试、退出时错误的解决
    DailyWallpaper v1.03 released
    编程当道,学点Python技术好傍身
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5054636.html
Copyright © 2011-2022 走看看