java设计模式之建造者模式

1、前言

建造者模式(Builder Pattern) 又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。

建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

简单来说就是专人做专事。

2、建造者模式包含的角色

建造者模式通常包括下面几个角色:

  • Builder(抽象的建造者):给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
  • ConcreteBuilder(具体的建造者):实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
  • Director(指挥者):调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
  • Product(产品角色):要创建出来的复杂目标对象。

3、简单的示例

房主找来设计师(Director)和建造者(ConcreteBuilder),完成一个房子(Product)的建造。

  • 创建一个Product的目标对象
import lombok.Data;

@Data
public class House {

	// 卧室
	private Bedroom bedroom;
	// 书房
	private Study study;
	// 厨房
	private Kitchen kitchen;
	// 厕所
	private Toilet toilet;
}
  • 创建一个抽象的建造者(Builder)
public interface Builder {
	
	void makeBedroom();
	void makeKitchen();
	void makeStudy();
	void makeToilet();
	// 交房
	House getHouse();
}
  • 实现抽象建造者,创建具体的建造者(ConcreteBuilder)
public class HouseBuilder implements Builder {

	private House house = new House();
	
	@Override
	public void makeBedroom() {
		house.setBedroom(new Bedroom());
	}

	@Override
	public void makeKitchen() {
		house.setKitchen(new Kitchen());
	}

	@Override
	public void makeStudy() {
		house.setStudy(new Study());
	}

	@Override
	public void makeToilet() {
		house.setToilet(new Toilet());
	}

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

}
  • 创建一个指挥者的角色(Director)
public class Designer {
	
	@Setter
	private Builder builder;
	
	public Designer (Builder builder) {
		this.builder = builder;
	}

	/**
	 * 设计师下发任务给建造者
	 * 
	 * 设计师决定建造者造什么
	 * 
	 * @param builder
	 */
	public House construct(){
		builder.makeBedroom();
		builder.makeKitchen();
		builder.makeStudy();
		builder.makeToilet();
		
		return builder.getHouse();
	}
}
  • 需求实现(Client)
public class Client {

	public static void main(String[] args) {
		// 找建造工人
		Builder houseBuilder = new HouseBuilder();
		// 找设计师,并把建造工人交给设计师
		Designer designer = new Designer(houseBuilder);
		//designer.setBuilder(houseBuilder);
		// 设计师监工,完成后并交房
		House house = designer.construct();
		System.out.println(house);
	}
}

4、图解建造者模式

5、后记

建造者模式(设计模式)更注重的是一种设计思想,减少代买的侵入,专人专事。使得代码更容易扩展。比如房主建房的时候,不想要书房,拿着只需要告诉指挥者,稍作修改就会完美实现。从代码层面讲,只需要修改指挥者的代码即可。

笔者创建实体类的时候,没有使用getter和setter 方法,而是使用了@Data来代替实体类中的相关方法,只要因为lombok技术既可以实现,这样一来代码会显得更简洁,依赖如下:

<!-- 增加lombok依赖,可以使用注解@Data 编译时自动生成get,set方法,构造函数,toString方法 -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.16.20</version>
	<scope>provided</scope>
</dependency>

注意:在eclipse工具中并不能自动识别lombok的注解,引入依赖之后需要将lombok的jar安装到eclipse中。找到lombok.jar文件位置,在当前位置使用DOS命令: java -jar lombok.1.16.20.jar。数秒后将弹出一框,以确认eclipse的安装路径 ,确认完eclipse的安装路径后,点击install/update按钮,即可安装完成 。

确认是否安装成功?

 在配置文件eclipse.ini中是否 添加了如下内容: 
           -javaagent:lombok.jar 
           -Xbootclasspath/a:lombok.jar 

如果有则表示安装成功。重启eclipse即可

6、参考文档

技术博客: https://blog.youkuaiyun.com/qq_34337272/article/details/80540059

lombok官方:https://www.projectlombok.org/

-- END

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值