设计模式----建造者模式UML和实现代码

一、什么是建造者模式?

1、定义

建造者模式:将一复杂对象的表示与构建相分离,使得同样的构建过程可创建不同的显示。

2、  与抽象工厂的区别

在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。

3、举例

建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。

举个简单的例子,如 人的身体各部位,人的生命周期,一年四季,汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。

二、建造者模式UML

015117_9VOb_2003960.png

三、JAVA代码实现

Builder.java

package com.amosli.dp.build.builder;

public abstract class Builder {
	public abstract void buildPartA();
	public abstract void buildPartB();
	public abstract Product getResult() ;
}

ConcreteBuilder.java

package com.amosli.dp.build.builder;

public class ConcreteBuilder extends Builder {

	private Product product = new Product();

	public Product getResult() {
		return product;
	}

	@Override
	public void buildPartA() {
		product.add("part a..");
	}

	@Override
	public void buildPartB() {
		product.add("part b..");
	}

}

Director.java

package com.amosli.dp.build.builder;

public class Director {
	private Builder builder;

	public Director(Builder builder) {
		this.builder = builder;
	}

	public void construct() {
		builder.buildPartA();
		builder.buildPartB();
	}
}


Product.java

package com.amosli.dp.build.builder;

import java.util.ArrayList;

public class Product {
	ArrayList<String> product = new ArrayList<String>();

	public void add(String part) {
		product.add(part);
	}
}


Client.java

package com.amosli.dp.build.builder;

public class Client {
	public static void main(String[] args) {
		Builder builder = new ConcreteBuilder();
		Director director = new Director(builder);
		director.construct();
		Product product = builder.getResult();
		System.out.println(product.product);
	}
}


四、使用场景

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

  • 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。

  • 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式是非常合适。

  • 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程。该种场景,只能是一个补偿方法,因为一个对象不容易获得,而在设计阶段竟然没有发觉,而要通过创建者模式柔化创建过程,本身已经违反设计最初目标。

五、优点缺点

1.优点

封装性

      使用建造者模式可以使客户端不必知道产品内部组成的细节

易扩展

  建造者独立,不同builder,可以构建成不同的显示,相互独立,提高了程序的可扩展性

便于控制细节风险

      由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响

2.缺点

     1.建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。

     2.如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,可维护性将变差

本系列文章源码地址,https://github.com/amosli/dp  欢迎Fork  & Star !!



   


转载于:https://my.oschina.net/u/2003960/blog/532379

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值