设计模式之建造者模式

1. 简介

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

这种类型的设计模式属于创建型模式(提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活)。

2. 四个角色

  1. Builder:建造者,给出一个抽象接口,以规范产品对象各组成部分的建造。只规定要创建具体化对象的哪些部分,不涉及具体对象部件的创建。
  2. ConcreteBuilder:具体建造者,实现Builder角色创建的接口,针对不同的商业逻辑,具体对象各部分的创建。建造完成后,提供产品的实例。
  3. Director:指挥者,调用ConcreteBuilder来创建具体对象的各部分,只负责对象各部分完整创建或按某种顺序创建,不涉及具体产品的信息。
  4. Product:具体产品,要创建的具体对象。

3. 应用

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

4. 代码实例:某游戏各等级装备的创建

4.1 Product类(具体产品类)

public class EquipmentProduct {

	/**
	 * 武器
	 */
	private String weapon;
	/**
	 * 帽子
	 */
	private String hat;
	/**
	 * 衣服
	 */
	private String dress;
	/**
	 * 鞋子
	 */
	private String shoes;
	
	public String getWeapon() {
		return weapon;
	}
	
	public void setWeapon(String weapon) {
		this.weapon = weapon;
	}
	
	public String getHat() {
		return hat;
	}
	
	public void setHat(String hat) {
		this.hat = hat;
	}
	
	public String getDress() {
		return dress;
	}
	
	public void setDress(String dress) {
		this.dress = dress;
	}
	
	public String getShoes() {
		return shoes;
	}
	
	public void setShoes(String shoes) {
		this.shoes = shoes;
	}
}

Builder接口(建造者标准接口)

public interface EquipmentBuilder {
	public void buildWeapon();
	public void buildHat();
	public void buildDress();
	public void buildShoes();
	public EquipmentProduct createProduct();
}

4.3 两个具体建造者类(实现Builder接口)

public class EquipmentBuilderForLv100 implements EquipmentBuilder {

	private EquipmentProduct ep;
	
	public EquipmentBuilderForLv100() {
		this.ep = new EquipmentProduct();
	}

	@Override
	public void buildWeapon() {
		ep.setWeapon("风火游龙枪");
	}

	@Override
	public void buildHat() {
		ep.setHat("九霄烈焰冠");
	}

	@Override
	public void buildDress() {
		ep.setDress("天衣");
	}

	@Override
	public void buildShoes() {
		ep.setShoes("踏云靴");
	}

	@Override
	public EquipmentProduct createProduct() {
		return ep;
	}
}
public class EquipmentBuilderForLv120 implements EquipmentBuilder {

	private EquipmentProduct ep;
	
	public EquipmentBuilderForLv120() {
		this.ep = new EquipmentProduct();
	}

	@Override
	public void buildWeapon() {
		ep.setWeapon("混元斩龙戟");
	}

	@Override
	public void buildHat() {
		ep.setHat("七星宝冠");
	}

	@Override
	public void buildDress() {
		ep.setDress("诸天法袍");
	}

	@Override
	public void buildShoes() {
		ep.setShoes("钧天履");
	}

	@Override
	public EquipmentProduct createProduct() {
		return ep;
	}
}

4.4 指挥者类(创建某等级装备)

public class EquipmentDirector {

	public EquipmentProduct createEquipmentProductByDirector(EquipmentBuilder equipBuilder) {
		equipBuilder.buildWeapon();
		equipBuilder.buildHat();
		equipBuilder.buildDress();
		equipBuilder.buildShoes();
		return equipBuilder.createProduct();
	}
}

4.5 测试类(创建100级和120级装备)

public class BuilderTestMain {

	public static void main(String[] args) {
		EquipmentDirector ed = new EquipmentDirector();
		EquipmentProduct ep = ed.createEquipmentProductByDirector(new EquipmentBuilderForLv100());
		System.out.println(ep.getWeapon());
		System.out.println(ep.getHat());
		System.out.println(ep.getDress());
		System.out.println(ep.getShoes());
		
		System.out.println("===============================");
		
		ep = ed.createEquipmentProductByDirector(new EquipmentBuilderForLv120());
		System.out.println(ep.getWeapon());
		System.out.println(ep.getHat());
		System.out.println(ep.getDress());
		System.out.println(ep.getShoes());
	}
}

5. 优缺点

5.1 优点

  1. 易于拓展
  2. 代码解耦,模块化,方便维护。

5.2 缺点

维护成本高,如果建造者内部发生变更,就不太适合建造者这种模式了。

参考链接

java设计模式之建造者模式

JAVA设计模式之简单粗暴学建造者模式

最后,谢谢各位读者的耐心阅读,如有语句不通顺或者不准确的地方,还请指正!谢谢!(__)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值