对于Builder模式很简单,但是一直想不明白为什么要这么设计,为什么要向builder要Product而不是向知道建造过程的Director要。刚才google到一篇文章,总算清楚了。在这里转贴一下这位richardluo的比喻。
简单地说,就好象我要一座房子住,可是我不知道怎么盖(简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较 高),于是我需要找一帮民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干活,光是下命令,这里砌一 堵墙,这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟 民工要,记住了!
以下是richardluo的代码,我根据他的思路加上了相应的注释。
1,定义工人接口,就是能够完成建造房子任务的人的通用要求。
java 代码
// 工人接口,定义了各个工人所要进行的工所作。他们负责进行具体部件如窗户,地板的建造。 // 同时因为房子是民工建的,因此建设完成后由他把房子递交回房主 public interface Builder { public void makeWindow(); public void makeFloor(); public Room getRoom(); }2,定义设计师,他的职责是指挥房主指派给他的工人按照自己的设计意图建造房子。
java 代码
// 设计师。他知道房子应该怎么设计,但他不会自己去建造,而是指挥民工去建造。 public class Designer { // 指挥民工进行工作 public void order(Builder builder) { builder.makeWindow(); builder.makeFloor(); } }3,民工,他负责具体事物的实施。
java 代码
// 民工。负责进行具体部件如窗户,地板的建造。 //同时因为房子是民工建的,因此建设完成后由他把房子递交回房主 public class Mingong implements Builder { private String window=""; private String floor=""; public void makeWindow() { window=new String("window"); } public void makeFloor(){ floor=new String("floor"); } // 回交房子给房主 public Room getRoom() { if((!window.equals(""))&&(!floor.equals(""))) { System.out.println("room ready!"); return new Room(); } else return null; } }4,房主,就是雇人,收房。
java 代码
// 房主。房主的任务就是聘请一个民工,一个设计师,同时把民工给设计师指挥,督促设计师开展工作。最后从民工手上收房。 public class Client { public static void main(String[] args) { Builder mingong = new Mingong(); Designer designer = new Designer(); designer.order(mingong); mingong.getRoom(); } }
相关推荐
本人理解的builder模式
Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的...
建造者模式 使用ES6代理为Typescript创建构建器模式。 安装 yarn add builder-pattern 用法 基本用法 interface UserInfo { id : number ; userName : string ; email : string ; } const userInfo = Builder ...
设计模式之---建造模式 1,建造模式属于对象的...抽象建造者builder接口,实现生产产品操作--创建完成 提供产品实例; ,导演者(director):调用具体建造者角色以创建产品对象; ,产品(Product):建造中的复杂对象,
将一个复杂对象的构造与它的表示分离,使同样的构建 过程可以创建不同的表示,这样的设计模式被称为建造者模式。
NULL 博文链接:https://bestupon.iteye.com/blog/480245
2-9 构建者模式Builder的定义、场景与实现 2-10 构建者模式的实用工程技术——代码的坏味道:算法与对象构建的隔离 2-11 原型模式的定义场景与实现——对象的快速复制 2-12 原型模式的实用工程技术——DRY原则与使用...
Builder模式模式介绍模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Android源码中的模式实现在Android源码
本文实例讲述了PHP设计模式之建造者模式(Builder)原理与用法。分享给大家供大家参考,具体如下: 这个建造者模式,我们也可以称为生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程...
功能定义打印作业使用的字体,对每个打印作业PowerBuilder支持八种字体。 语法PrintDefineFont(printjobnumber,fontnumber,facename,height,weight,fontpitch,fontfamily, italic,underline) 参数printjobnumber:用...
23种设计模式演示代码文件结构图gof23 |- creational(创建型模式) |- simplefactory 简单工厂模式案例 |- factorymethod 工厂方法模式案例 |- abstractfactory 抽象工厂模式案例 |- builder 建造者模式案例 |- ...
NULL 博文链接:https://jacky-dai.iteye.com/blog/2295399
php /** * 建造者模式 * * 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 */ class Product { public $_type = null; public $_size = null; public $_color = null; public function ...
建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite...
蚂蚁形式建造者FormBuilder是一个小帮手(源代码少于500行),轻松使用和构建表单,同时又不会阻止您使用原始的antd form API。 它不仅可以用作可编辑表单,而且可以显示具有表单布局的只读信息。 它同时支持antd v3...
建造者模式 Prototype-------->原型模式 1.2 结构型模式 Adapter-------->适配器模式 Bridge-------->桥接模式 Composite-------->组合模式 Decorator-------->装饰模式 Facade-------->外观模式 ...
建造者模式是一种创建型设计模式,用于简化复杂对象的创建过程。以下是建造者模式的关键概念和步骤: 1. **分离复杂对象的构建和表示**:建造者模式将一个复杂对象的构建过程与其最终的表示形式分离开来。这样做的...
工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式---这些设计模式关注类和...
建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite...