博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式----建造者模式UML和实现代码
阅读量:6411 次
发布时间:2019-06-23

本文共 2267 字,大约阅读时间需要 7 分钟。

hot3.png

一、什么是建造者模式?

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
 product = new ArrayList
(); 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.如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,可维护性将变差

本系列文章源码地址,  欢迎Fork  & Star !!

   

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

你可能感兴趣的文章
Linux下的Tftp服务
查看>>
C#将集合和Json格式互相转换的几种方式
查看>>
java连接数据库并操作
查看>>
集群下文件同步问题
查看>>
ASA 5510 V821 EASY ×××配置
查看>>
ubuntu server 更换源
查看>>
EXT中的gridpanel自适应窗口的方法
查看>>
unary operator expected
查看>>
IPC之共享内存
查看>>
新加坡之旅
查看>>
IBM X3650 M3服务器上RAID配置实战
查看>>
Mysql DBA 高级运维学习之路-索引知识及创建索引的多种方法实战
查看>>
go语言与java nio通信,解析命令调用上下文拉起ffmpeg,并引入livego做的简单流媒体服务器...
查看>>
JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)
查看>>
【数据结构】线性表(一):顺序列表
查看>>
利用Mallet工具自动挖掘文本Topic
查看>>
Windows下oracle打补丁步骤
查看>>
Python教程(一)Python简介
查看>>
asp.net forms认证
查看>>
Hadoop 公平调度器算法调度解析
查看>>