建造者模式

本文深入讲解了建造者模式的概念和应用,通过实例演示了如何使用该模式构建复杂对象,同时探讨了其优缺点及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建造者模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。简单点讲,就是使用多个简单的对象一步一步构建成一个复杂的对象,属于创建型模式,提供了一种创建对象的最佳方式。

优点

  • 建造者独立,容易扩展
  • 便于控制细节风险

缺点

  • 产品必须有共同点,范围有限制
  • 内部变化复杂,会有很多的建造类

案例

以lol 盖伦、赵信召唤师为例,召唤师都有名称和qwer技能

package pattern;

public class Hero {
	private String name;
	private String qskill;
	private String wskill;
	private String eskill;
	private String rskill;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getQskill() {
		return qskill;
	}
	public void setQskill(String qskill) {
		this.qskill = qskill;
	}
	public String getWskill() {
		return wskill;
	}
	public void setWskill(String wskill) {
		this.wskill = wskill;
	}
	public String getEskill() {
		return eskill;
	}
	public void setEskill(String eskill) {
		this.eskill = eskill;
	}
	public String getRskill() {
		return rskill;
	}
	public void setRskill(String rskill) {
		this.rskill = rskill;
	}
	@Override
	public String toString() {
		return "Hero [name=" + name + ", qskill=" + qskill + ", wskill=" + wskill + ", eskill=" + eskill + ", rskill="
				+ rskill + "]";
	}
	
}
package pattern;

public interface HeroBuilder {
	void createName();
	void createqSkill();
	void createwSkill();
	void createeSkill();
	void createrSkill();
	Hero createHero();
}
package pattern;

public class Gailun implements HeroBuilder {
	private Hero hero;

	@Override
	public void createName() {
		hero.setName("盖伦");
	}

	@Override
	public void createqSkill() {
		hero.setQskill("q:致命打击");
	}

	@Override
	public void createwSkill() {
		hero.setWskill("w:勇气");
	}

	@Override
	public void createeSkill() {
		hero.setEskill("e:审判");
	}

	@Override
	public void createrSkill() {
		hero.setRskill("r:德玛西亚正义");
	}

	@Override
	public Hero createHero() {
		return hero;
	}

	public Gailun() {
		hero = new Hero();
	}

}
package pattern;

public class Zhaoxin implements HeroBuilder {
	private Hero hero;

	@Override
	public void createName() {
		hero.setName("赵信");
	}

	@Override
	public void createqSkill() {
		hero.setQskill("q:三重爪击");
	}

	@Override
	public void createwSkill() {
		hero.setWskill("w:风斩电刺");
	}

	@Override
	public void createeSkill() {
		hero.setEskill("e:无畏冲锋");
	}

	@Override
	public void createrSkill() {
		hero.setRskill("r:新月护卫");
	}

	@Override
	public Hero createHero() {
		return hero;
	}

	public Zhaoxin() {
		hero = new Hero();
	}
}
package pattern;

public class Director {
	public Hero createHero(HeroBuilder hero){
		hero.createName();
		hero.createeSkill();
		hero.createqSkill();
		hero.createwSkill();
		hero.createrSkill();
		return hero.createHero();
	}

}
package pattern;

public class Test {
	public static void main(String[] args) {
		Director d= new Director();
		// 创建赵信
		Hero zhaoxin = d.createHero(new Zhaoxin());
		System.out.println(zhaoxin.toString());
		
		// 创建盖伦
		Hero gailun = d.createHero(new Gailun());
		System.out.println(gailun.toString());
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值