JAVA设计模式(六)——建造者模式

1、建造者模式

       建造者模式又被成为生成器模式,是GoF提出的23种设计模式种的一种。

       建造者模式是一种对象创建型的模式,用来隐藏复合对象的创建过程,他把复合对象的创建过程加以抽象,通过子类的继承或者重载,动态的创建具有复合属性的对象。在经典的GoF设计种,将之定义为:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。


2、结构示意图

      这里有衣服图示说明,额,这个图是我从网上copy来的,不是原创,我只是对此加了一些说明而已:


builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。下面我们会举例说明,抽象的接口只提供方法名称,不提供实现。
ConcreteBuilder:实现Builder接口,针对不同的业务逻辑,具体化复杂对象的各部分的创建。在这里,我们要在创建完产品之后,提供产品的实例对象。
Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
Product:要创建的复合对象,应该具有多种类型,下面我们会举例说明。


3、应用场景

(1)、对象的创建,建造者模式是为了创建对象而存在的
(2)、创建的是复合对象,复合对象就是很多个对象具有复合属性
(3)、关注对象创建的各个部分的创建过程,不同的工厂对产品的属性有不同的创建方法


4、代码展示

        一个抽象接口类:

public interface HouseBuilder {

	/**
	 * 修理地板
	 */
	public void fixFloor();
	/**
	 * 修理墙壁
	 */
	public void fixWall();
	/**
	 * 修理屋顶
	 */
	public void fixTop();
	/**
	 * 获得house这个对象
	 * @return
	 */
	public House getHouse();
}

       一个抽象类的实现类,这里可以看作是一个具体的对象:

/**
 * 普通房屋建造者
 * 
 * @author ljtyzhr
 * 
 */
public class NormalBuilder implements HouseBuilder {

	House house = new House();

	@Override
	public void fixFloor() {
		// TODO Auto-generated method stub
		house.setFloor("修理普通房屋的地板");
	}

	@Override
	public void fixWall() {
		// TODO Auto-generated method stub
		house.setWall("修理普通房屋的墙壁");
	}

	@Override
	public void fixTop() {
		// TODO Auto-generated method stub
		house.setTop("修理普通房屋的屋顶");
	}

	@Override
	public House getHouse() {
		return house;
	}
}

       实际的调用这,通过它我们调用了实际的操作对象:

public class HouseDirector {
	private HouseBuilder houseBuilder ;
	
	public HouseDirector(HouseBuilder houseBuilder) {
		super();
		this.houseBuilder = houseBuilder;
	}
	
	public void fixHouse(){
		houseBuilder.fixFloor();
		houseBuilder.fixWall();
		houseBuilder.fixTop();
	}
}

       产品对象,具备相应的属性和方法:

public class House {
	
	// 地板
	private String floor;
	// 墙壁
	private String wall;
	// 屋顶
	private String top;
	
	public String getFloor() {
		return floor;
	}
	public void setFloor(String floor) {
		this.floor = floor;
	}
	public String getWall() {
		return wall;
	}
	public void setWall(String wall) {
		this.wall = wall;
	}
	public String getTop() {
		return top;
	}
	public void setTop(String top) {
		this.top = top;
	}
}


5、测试方法

      这里提供测试方法,我们可以使用两种不同的方式进行比较,一种是普通模式,需要测试类自己去调用具体的方法,第二种是我们的建造者模式,降低耦合,代码:

public class MainClass {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 1、普通模式
//		House house = new House();
//		house.setFloor("123");
//		house.setTop("456");
//		house.setWall("789");
//		System.out.println(house.getFloor());
//		System.out.println(house.getWall());
//		System.out.println(house.getTop());
		
		
		// 2、使用建造者模式
		HouseBuilder houseBuilder = new NormalBuilder();
		HouseDirector director = new HouseDirector(houseBuilder);
		director.fixHouse();
		House house = houseBuilder.getHouse();
		System.out.println(house.getFloor());
		System.out.println(house.getWall());
		System.out.println(house.getTop());
	}

}

6、总结

        其实也没有什么太多神秘的东西,跟我们在软件工程种学到的,高內聚,低耦合,其实就是这个道理。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值