建造者模式也叫生成器模式, 定义如下:
将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示
类图如下:
在建造者模式中, 四个角色如下:
先看product类的代码, 通常他是一个组合或继承产生的类:
抽象建造者代码如下:
其中 setpart 方法是零件的配置, 其他的对象, 获得一个不同零件,或者不同的装配顺序就可能产生不同的产品
具体建造者代码如下:
导演类代码:
导演类起到封装的作用,避免高层模块深入到建造者内部的实现类. 当然, 在建造者模式比较庞大时, 导演类可以有多个
现在又一个项目,创建不同的汽车, 有奔驰的宝马的, 车有启动、停止、喇叭声音、引擎声音, 不同车有不同的顺序, 开始创建, 先使用模板方法模式, 类图如下
在carmodel中定义了一个 setsequence 方法, 车辆模型的这几个动作要如何排布, 是在 arraylist中定义的. 然后run方法根据 sequence定义的顺序完成指定的顺序动作
carmodel代码:
carmodel是这样设计的, setsequence方法允许客户自己设置一个顺序, 是先启动还是先按喇叭, 在子类中实现其基本方法, 然后同过run方法实现顺序调用
其实现类代码就不再占用篇幅
这时有一个要求, 生产一个奔驰模型,要先发动引擎,再启动,然后停下来,不需要按喇叭, 创建代码如下:
这样我们就创建了一辆汽车, 但是需求是汽车的执行顺序要能够随意调整, 我们只满足了一个, 还有下一个,下下个, 那怎么办? 我们每次都要写这些来满足. 我们要想办法解决这个问题, 那么我们可以通过建造者, 通过建造者创建, 类图如下
其 carbuilder 代码如下:
实现类代码如下
这样,我们就可以通过一个导演类,封装各个顺序并返回产品
其中的方法可以添加,可以有很多方法
这样,再创建的时候就轻松多了,直接调用一个方法即可
这不是一个单纯的建造者模式, 其中使用了模板方法模式
优点如下:
建造者模式的使用场景:
建造者模式关注的是零件类型和装配工艺(顺序), 这是它与工厂方法模式最大不同的地方, 虽然同为创建类模式, 但是注重点不同
建造者模式最主要的功能是基本方法的调用顺序安排,而工厂方法则重点是创建
可以关注一下鄙人的公众号, 谢谢各位了!
如对本文有疑问, 点击进行留言回复!!
设计模式之单例模式(Singleton Pattern),太简单了
java多线程定时器和java判断一个时间是否在时间区间内和用正则表达式获取String字符串之间的数据
网友评论