设计模式之构造者模式
来源:互联网 发布:弗洛伊德算法 path 编辑:程序博客网 时间:2024/05/21 14:51
构造者模式是创建型模式之一,当构造的产品比较复杂,需要分为多个步骤或者流程完成产品的构建,可以选用构造模式。
构造者模式将具体的构造流程或者顺序隐藏,用户只需要调用对应的构造方法而不需要关心具体的构造细节问题。
构造者模式分为抽象构造者,具体构造者,构造导演类(申明产品构造的具体流程),产品类
代码如下:
抽象构造者:
package com.dean.dp.builder.dir;/** * 抽象构造者,定义构造对象的系列规范步骤 * @author bobei01 * */public interface IBuilder {/** * 构造墙 */public void builderWall();/** * 构造地板 */public void builderFloor();/** * 获取最终产品 * @return */public House getHouse();}
具体构造者:
package com.dean.dp.builder.dir;/** * 具体构造者 * @author bobei01 * */public class BuilderImpl implements IBuilder{private House house;public BuilderImpl() {super();this.house = new House();}@Overridepublic void builderWall() {house.setWall("太墙了");}@Overridepublic void builderFloor() {house.setFloor("超级无敌地板");}@Overridepublic House getHouse() {return house;}}
构造导演类:
package com.dean.dp.builder.dir;/** * 建造者模式的导演类,负责调用具体的建造者 * 引入具体的构造者,定义产品构造的流程顺序 * 将具体的构造过程隐藏,用户只需要使用不需要关系其内部构建细节 * @author bobei01 * */public class Director {private IBuilder builder;public Director(IBuilder builder) {super();this.builder = builder;}/** * 指导如何构建房屋,在这个方法中还可用加入其他逻辑,即在构造是验证等其他操作 */public void builderHouse(){builder.builderWall();builder.builderFloor();}}
产品类:
package com.dean.dp.builder.dir;/** * 具体要构造的产品 * @author bobei01 * */public class House {//房屋的墙private String wall;//房屋的地板private String floor;public String getWall() {return wall;}public void setWall(String wall) {this.wall = wall;}public String getFloor() {return floor;}public void setFloor(String floor) {this.floor = floor;}}
测试用例:
package com.dean.dp.builder.dir;public class Main {public static void main(String[] args) {IBuilder builder = new BuilderImpl();Director director = new Director(builder);//直接构造对象,不需要关心具体的细节director.builderHouse();House house = builder.getHouse();System.out.println(house.getFloor());}}
构造者模式另一种实现方式:上面方法中需要定义构造者接口,然后定义具体的构造者,通过导演类负责串联达到构造复杂对象。
在实际环境中,为了简化对象的创建,可以直接定义具体的构造者,不需要构造接口,与导演类。上面的方式通过接口定义构造产品,扩展比较灵活方便。
如果需要加入新的产品构造,只需要实现构造者接口,以及定义对应的构造者导演类即可。根据使用环境具体选择用什么方式。。。
代码
具体构造者:
package com.dean.dp.builder.sim;/** * 直接使用具体的构建类,不需要导演类 * @author bobei01 * */public class PeopleBuilder {private People people;public PeopleBuilder() {super();people = new People();}/** * 构建名称 * @param name * @return */public PeopleBuilder builderName(String name){people.setName(name);return this;}public PeopleBuilder builderNum(String num){people.setNum(num);return this;}public PeopleBuilder builderAge(int age){people.setAge(age);return this;}public People builder(){//返回构造的对象之前还可做一些其他操作,比如验证修饰等return people;}}
构造的产品:
package com.dean.dp.builder.sim;public class People {// 名字private String name;// 电话private String num;// 年龄private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNum() {return num;}public void setNum(String num) {this.num = num;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
测试用例:
package com.dean.dp.builder.sim;public class Main {public static void main(String[] args) {People people = new PeopleBuilder().builderAge(27).builderName("Dean Yang").builderNum("425343").builder();System.out.println(people.getName());// Dean Yang}}
0 0
- 设计模式之构造者模式
- 设计模式之:构造者模式
- 设计模式之构造模式
- 设计模式--构造者模式
- 设计模式---构造者模式
- 《架构模式应用●设计模式》之构造者
- JS设计模式之构造函数模式
- C语言设计模式:构造者模式
- Builder构造者设计模式
- 设计模式之构造器Builder
- js设计模式之构造函数
- 【设计模式】Java中的模式 -- 构造者模式
- Java设计模式构造型之适配器模式
- JavaScript设计模式之构造器(Constructor)模式
- 设计模式之构造器模式(Builder)
- 构造型设计模式
- Net框架中的设计模式之Builder(构造者)--兼谈抽象工厂和composite模式
- 设计模式之装饰者设计模式
- I'm Telling the Truth(二分匹配)
- JSP引入JS文件路径错误原因分析
- 编写Android.mk中的LOCAL_SRC_FILES的终极技巧
- Android App 内存泄露之调试工具(1)
- HTML5开发-在你的游戏应用中加入广告
- 设计模式之构造者模式
- HDU 1098 Ignatius's puzzle
- hdoj 1076 An Easy Task(有关闰年)
- 2048game
- vs2012 中文版界面 属性(2)
- vsphere 5.5 web client 安装提示不兼容的错误
- MSP430 系统时钟 ACLK、MCLK、SMCLK
- Viola&Jones的人脸检测说起
- 使用 Simple 简化 XML 序列化