首页 > 代码库 > 《JAVA与模式》之建造者模式
《JAVA与模式》之建造者模式
1.概念
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]
与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。
消费者最后是通过建造者得到产品而不是通过指导者,另外,消费者无法直接让建造者建造产品,这个可能是建造者跟工厂方法的最大区别
工厂方法是需求者可以直接接触到工厂对象,然后指派其生产。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
工厂方法角色
1.抽象产品
2.具体产品
3.抽象建造者
4.具体建造者
5.指挥者
消费者通过指挥者调动具体的建造者,生产具体产品
举个例子,我要装修房子,我请了一批工人,但是我不是搞设计的,所以我又请了装修公司的人(指挥者),让他们负责调度
工人(建造者),而这些工人是我介绍给指挥者的,最后通过工人的努力,得到我想要的效果(产品),这个产品是工人给你的,而不是设计师
设计师只负责设计,指挥工人而已
先看一个简单的实例
1 interface Product{ 2 3 public void part1(); 4 public void part2(); 5 public void part3(); 6 7 } 8 class ProductOne implements Product{ 9 10 public void part1() {11 System.out.println("ProductOne part1");12 }13 public void part2() {14 System.out.println("ProductOne part2");15 }16 public void part3() {17 System.out.println("ProductOne part3");18 }19 }20 class ProductTwo implements Product{21 22 public void part1() {23 System.out.println("ProductTwo part1");24 }25 public void part2() {26 System.out.println("ProductTwo part2");27 }28 public void part3() {29 System.out.println("ProductTwo part3");30 }31 }32 interface AbstractBuilder{33 34 //获得建造好的产品35 public Product getProduct();36 //创建产品 好拗口 因为是生产产品 工厂模式?????37 public void buildProduct();38 }39 40 class ProductTwoBuilder implements AbstractBuilder{41 private Product product=new ProductTwo();42 43 public void buildProduct() {44 product.part1();45 //product.part2();//不是所有的步骤都需要的46 product.part3();47 }48 public Product getProduct() {49 System.out.println("ProductTwo 生产完毕");50 return this.product;51 }52 }53 class ProductOneBuilder implements AbstractBuilder{54 private Product product=new ProductOne();55 public void buildProduct() {56 product.part2();57 product.part3();58 }59 public Product getProduct() {60 System.out.println("ProductOne 生产完毕");61 return this.product;62 }63 }64 //指挥者 等同于抽象工厂中的 具体工厂65 class Director {66 private AbstractBuilder builder;67 public Director(AbstractBuilder builder){68 69 this.builder=builder;70 }71 public void construct(){72 73 builder.buildProduct();74 }75 76 }
参考地址:
http://www.cnblogs.com/devinzhang/archive/2012/01/06/2314670.html
http://haolloyin.blog.51cto.com/1177454/333155
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。