设计模式之Builder构建者模式
来源:互联网 发布:京东自动抢购软件 编辑:程序博客网 时间:2024/04/24 02:13
1.定义
使复杂对象的构建与表示分离,使同样的构建过程有不同的表示。
2.使用场景
(1)相同的方法,不同的执行顺序,产生不同的事件结果时。
(2)多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
(3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个使用建造者模式非常适合。
(4)当初始化一个对象特别复杂时,如参数多,且很多参数有默认值。
3.第一种经典的实现方式
Client Director Builder Product模式
(转)
简单地说,就好象我要一座房子住,可是我不知道怎么盖(简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较高),于是我需要找一帮民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干活,光是下命令,这里砌一堵墙,这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟民工要,记住了!
最终的产品:Product (Room)
public class Room { private String window; private String floor; public void setWindow(String window){ this.window = window; } public void setFloor(String floor){ this.floor = floor; } public String getWindow(){ return window; } public String getFloor(){ return floor; } @Override public String toString() { return "{\"window\":\"" + window + "\",\"floor\":\"" + floor + "\"}"; }}
Buidler构建者接口,功能就是建窗户,建地板,最终将Product交付给Client
public interface Builder { public void makeWindow(); public void makeFloor(); public Room returnRoom();}
Buidler的实现
public class RoomBuilder implements Builder{ private Room room = new Room(); @Override public void makeWindow() { room.setWindow("Window"); } @Override public void makeFloor() { room.setFloor("Floor"); } @Override public Room returnRoom() { return room; }}
Director 指挥Builder如何工作(构建顺序)
public class Director { public void command(Builder builder){ //先建造窗户 builder.makeWindow(); //然后建造地板 builder.makeFloor(); }}
Client拿到产品Product (Room)
public class Client { public static void main(String[] args) { //工人建造Product Builder build = new RoomBuilder(); Director director = new Director(); //Director指挥工人的工作顺序 director.command(build); //最终将Product交给Client Room room = build.returnRoom(); System.out.println(room.toString()); }}
3.第二种内部类的实现方式(目前通用的写法)
public class Person { private String name; private String age; private String weight; private String height; private Person(Builder builder){ this.name = builder.name; this.age = builder.age; this.weight = builder.weight; this.height = builder.height; } public String getName() { return name; } public String getAge() { return age; } public String getWeight() { return weight; } public String getHeight() { return height; } static class Builder{ private String name; private String age; private String weight; private String height; public Person build(){ return new Person(this); } public Builder name(String name){ this.name = name; return this; } public Builder age(String age){ this.age = age; return this; } public Builder weight(String weight){ this.weight = weight; return this; } public Builder height(String height){ this.height = height; return this; } } @Override public String toString() { return "{\"name\":\"" + name + "\",\"age\":\"" + age + "\",\"weight\":\"" + weight + "\",\"height\":\"" + height + "\"}"; }}
声明内部类,Person的构造器对外隐藏,在内部类的创建Person的成员变量时,返回this,实现链式调用。
把自己学习设计模式的过程记成笔记,方便自己随时查看,如有错误,欢迎指出,谢谢!
- 设计模式之构建者Builder模式
- 设计模式之Builder构建者模式
- 设计模式之构建Builder
- 设计模式学习之构建者模式(Builder)
- 思维盛宴之设计模式-构建者模式Builder Pattern
- Builder设计模式之构建万能Dialog
- 设计模式——__构建者模式 Builder模式
- 构建者模式(Builder)
- 【设计模式】之 Builder 建造者模式
- 设计模式之建造者(builder)模式
- 设计模式之建造者模式(Builder)
- 设计模式之建造者模式---Builder
- 设计模式之建造者模式(Builder)
- 设计模式之建造者模式(Builder)
- 设计模式之建造者(builder)模式
- 设计模式之Builder建造者模式
- 设计模式之建造者模式(Builder)以及构建器
- 设计模式——构建者模式(Builder)
- 5分钟让你搞懂量子计算
- 第16章 使用Kotlin Native开发原生应用《Kotin 编程思想·实战》
- 第17章 KOTLIN语言生态《Kotin 编程思想·实战》
- 第18章 附录 & 参考资料 《Kotin 编程思想·实战》
- python初学 简单随机数方法及流程控制
- 设计模式之Builder构建者模式
- Given an array of integers, every element appears twice except for one. Find that single one.
- Spring Boot 使用 Kotlin Script Template 模板引擎kts 开发web应用
- 《Kotlin极简教程》第一章 Kotlin简介 配图
- MongoDB安装启动运行
- JS 知识碎片
- 《Kotlin极简教程》第1章 Kotlin简介
- 完整性约束
- 《Kotlin极简教程》第二章 快速开始:HelloWorld 配图