java设计模式--建造者模式

简介

1.指挥者(Director)直接和客户(Client)进行需求沟通; 
2. 沟通后指挥者将客户创建产品的需求划分为各个部件的建造请求(Builder); 
3. 将各个部件的建造请求委派到具体的建造者(ConcreteBuilder); 
4. 各个具体建造者负责进行产品部件的构建; 
5. 最终构建成具体产品(Product)


实例

1.电脑城老板(Diretor)和小成(Client)进行需求沟通(买来打游戏?学习?看片?)
2.了解需求后,电脑城老板将小成需要的主机划分为各个部件(Builder)的建造请求(CPU、主板blabla)
3.指挥装机人员(ConcreteBuilder)去构建组件;

4.将组件组装起来成小成需要的电脑(Computer)


UML



代码:

package com.sl.demo.builder;


import java.util.ArrayList;
import java.util.List;

/**
 * 电脑
 * @author pengkun
 *
 */
public class Computer {
	//电脑由小件组装而成
	private List<String> parts=new ArrayList<>();
	
	//电脑留有插零件的接口
	public void add(String part) {
		parts.add(part);
	}
	
	//展示自己(电脑属性)
	public void showMe() {
		for (String part : parts) {
			System.out.println("组装了:"+part);
		}
	}

}

package com.sl.demo.builder;
/**
 * 抽象组装人员
 * @author pengkun
 *
 */
public interface Builder {
	//主板
	void installMain() ;
	//cpu
	void installCPU();
	//硬盘
	void installHDD();
	//内存
	void installMemory();
	//组装好返回电脑
	Computer getComputer() ; 
}

package com.sl.demo.builder;
/**
 * 具体实现建造者
 * @author pengkun
 *
 */
public class ConcreteBuilder implements Builder {

	//持有一台待组装的电脑
	private Computer computer=new Computer();
	
	@Override
	public void installMain() {
		computer.add("华硕主板");
	}

	@Override
	public void installCPU() {
		computer.add("core i8");
	}

	@Override
	public void installHDD() {
		computer.add("三星 SDD 512G");
	}

	@Override
	public void installMemory() {
		computer.add("金士顿 rd5 32G");
	}

	@Override
	public Computer getComputer() {
		return computer;
	}

}


指挥者:
package com.sl.demo.builder;
/**
 * 指挥者
 * @author pengkun
 *
 */
public class Director {
	//叫实际建造者开始组装(根据需求构建,说白了组装电脑的配置由指挥者决定)
	public void construct(Builder builder) {
		builder.installMain();
		builder.installCPU();
		builder.installHDD();
		builder.installMemory();
	}
}

测试:

	@Test
	public void test() {
		//老板
		Director director=new Director();
		//组装人员
		Builder builder=new ConcreteBuilder();
		//和老板商谈,然后老板根据需求指挥组装人员组装一台什么配置的电脑
		director.construct(builder);
		//组装人员拿来电脑
		Computer computer= builder.getComputer();
		computer.showMe();
	}

结果:

组装了:华硕主板
组装了:core i8
组装了:三星 SDD 512G
组装了:金士顿 rd5 32G

 建造者模式的优点

        1)封装性:使用建造者模式可以是客户端不必知道产品内部组成的细节。

        2)建造者独立,容易扩展

        3)便于控制细节风险:由于具体的建造者是独立的,因此可以对建造者过程逐步细化,而不对其他的模块产生任何影

缺点


        1)相同的方法,不同的执行顺序,产生不同的事件结果时,可以使用建造者模式。

        2)多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不想同时,可以使用建造者模式。

        3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这时候可以使用建造者模式。

        4)在对象创建过程中会使用到系统的一些其他对象,这些对象在产品对象的创建过程中不易得到,也可以采用建造者模式封装该对象的创建过程。这种场景只能是一个补偿的方法,因为一个对象不容易获得,而在设计阶段竟然没有发现,而要通过设计这模式来柔化创建过程,本身设计已经出问题了。

        到这里,我们会发现,建造者模式和工厂方法模式有点像。但是两者有区别:建造者模式关注的是零件类型和装配工艺(顺序),而工厂模式是创建一个对象,这是最大不同的地方。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值