java的这些设计模式都离不开接口与抽象类,果然java里接口和抽象类的掌握是关键啊
这builder模式又得靠接口/抽象类来构建
Briger模式是把对象的属性和行为分隔开来,以至能使2部分都能独立的变化,这个builder模式是为了分离复杂对象里的组件的构建和复杂对象本身的构建过程的模式,这样复杂对象的子组件的构建和复杂对象本身的构建都可以独立的发生变化
其关键是子对象的构建方法被builder委派给了一个接口及其这个接口的实现类,这样子类的构建方法就有了动态性
然后在一个外在的管理类中去调用这个接口对象,手动的去调用子组件的初始化循序,以控制复杂对象本身的构造循序
uml类图
列子
我要构建一个飞船对象 包括一个发动机和雷达 飞船和这2个组件是聚合关系
public class SpaceShip {
private Engine engine;//发动机
private Raid radar;//雷达
public void setEngine(Engine engine) {
this.engine = engine;
}
public void setRaid(Raid raid) {
this.raid = raid;
}
}
构造实现雷达和发动机方法的接口还有一个得到整船的方法
public interface Builder {
void buildEngine();
void buildRaid();
SpaceShip getShip();
}
实现builder的子类
public class BuilderImpl implements Builder {
private SpaceShip ship;
public void buildEngine() {
ship.setEngine(new Engine());
}
public void buildRaid() {
ship.setRadar(new Raid());
}
public SpaceShip getShip() {
// TODO Auto-generated method stub
return this.ship;
}
}
一个负责子部件构造循序的管理类
public class Director {
public Director(Builder builder){
builder.buildEngine();
builder.buildRaid();
}
}
外部调用
Builder builder = new BuilderImpl();//组件构建实现者
Director d = new Director(builder);//组装执行者
SpaceShip ship = builder.getShip();//获得整船
这样我们在构造ship对象的时候不可以不管子组件是如何构建的拉,而且我们可以根据需要对子组件的构造方法动态的进行修改 只要让builder接口指向不同的实现对象就行了
分享到:
相关推荐
BUILDER模式 C++实现
adapter bridge build chainOfResp command decorator factory iterator mediator observer proxy state visitor 设计模式,java实现,如有纰漏请指正,谢谢
http://blog.csdn.net/column/details/xing-designpattern.html
直观上判断如果是development build模式打包出来的安装包,在游戏的画面的右下角会有development build的水印,且在切换场景也不会消失
一个加载 Include in Build模式和非include in build模式的spriteatlas的预设如何加载的例子
Windows 10 build 10130引入夜间模式.docx
Laravel开发-schema-build 表模式的数据库,将输出函数输入到文件中
建造模式 Build 生成器模式 设计模式
Windows 10 build 10147浏览器Edge获暗色显示模式.docx
使用Build模式【构建器】: new A.Build().set.set.build(); Build模式也适用于类层次结构 递归类型参数 /* * 递归类型参数: java 没有self,为了子类能返回正确的类型【即类型为Build的子类】 * */ abstract static...
FortiGate 100D 防火墙 FortiOS v6.2.0,build0866 固件 FortiOS 6.2第一个版本
NULL 博文链接:https://jiachenmianyu.iteye.com/blog/717898
摩托罗拉专用的对讲机编程软件,CPS10.0,BUILD507 ,无需密码即可使用
3、多用户模式手动切换,可启动/关闭新留言本申请模式。4、新注册模式手动切换,可启动/关闭新用户注册,以开放/保护留言本。5、自由留言模式手动切换,可启动/关闭用户不用密码发言功能,也可强制必须使用密码发言...
安卓手机端app开发源码,某个其中框架,详细需要后续上传XY-MBD07A 模块是基于赛普拉斯@CYPRESS(原美国博通@Broadcom)蓝 牙 4.2 LE+BR/EDR 双模芯片,集成...也可做蓝牙主模式(Host),连接 SPP、HID 和 BLE 等设备
建立测试buildtest是一个HPC测试框架,可帮助设施更有效地编写验收测试。 Buildtest为在编写称为Buildspecs的工具提供了便利的框架,并且buildtest处理如何创建测试脚本并在系统上运行测试。 Buildtest利用来指定...
设计模式-策略模式-c++版 压缩包中有build好的程序和工程设计到的所有类的源码,还有一个Uml类图
采用Asp三层模式开发,利用类(Class),绶存(Cache)和无排序分页可以支持100万以上数据记录 用户名:Snowboy 密码:Snowboy
软件专为个人用户所设计,可以方便的的为用户提供档案传输功能,并支持下载和上传、虚拟文件系统、HTML模版、带宽控制、简单模式与专家模式、LOG记录、完全可控连接、账户管理、动态域名更新等诸多功能。需要的朋友...
策略模式在实际项目中的应用二,该测试demo为普通项目,导入build path一下lib目录下的jar包,然后运行测试类即可在控制台看到测试结果