大话设计模式java版--建造者模式
2016-05-11 09:47
465 查看
建造者模式用来解决的问题是建造的将流程与细节分开来处理的。例如:楼房的建造流程是固定的,但是具体的建造是不一定的。还有汉堡的制造流程是固定的,但是具体的用的材料和细节是不一定的,这时候建造者模式就是为了解决这个问题出现的。
建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。引用GOF。
结合《大话设计模式》看看。
问题:制造一个人,头,双手,双脚。
分析:人的头,双手和双脚是建造一个人的工序,但是有可能因为每个人的头不同而不同,就是说细节是变化的,而制造方法是一样的。
而最终的交付结果当然是针对人来设计的。因此先有类peoduct。
Product.java
在这个Product类中我们附加上了添加部件的函数add();
接着根据面向接口编程,于是有了
PersonBuilder.java
实现接口,肥的建造类
PersonFatConcreteBuilder.java
实现接口,瘦的建造类
零件都有了。这时我们需要指挥官指挥流程!!!!!注意:指挥官是只负责指挥!指挥官是只负责指挥!指挥官是只负责指挥!重要的事情讲三遍!!
实现的细节都再具体的builder里面。
建造者模式就是这样子了。。。
建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。引用GOF。
结合《大话设计模式》看看。
问题:制造一个人,头,双手,双脚。
分析:人的头,双手和双脚是建造一个人的工序,但是有可能因为每个人的头不同而不同,就是说细节是变化的,而制造方法是一样的。
而最终的交付结果当然是针对人来设计的。因此先有类peoduct。
Product.java
package com.jing.builder; import java.util.ArrayList; import java.util.List; public class Product { private List<String> productParts = new ArrayList<String>(); public void add(String part){ productParts.add(part); } public void show(){ for(String part:productParts){ System.out.println(part); } } }
在这个Product类中我们附加上了添加部件的函数add();
接着根据面向接口编程,于是有了
PersonBuilder.java
package com.jing.builder; public interface PersonBuilder { public void builderHead(); public void builderLHand(); public void builderRHand(); public void builderLfOOT(); public void builderRFoot(); public Product getResult(); }
实现接口,肥的建造类
PersonFatConcreteBuilder.java
package com.jing.builder; public class PersonFatConcreteBuilder implements PersonBuilder{ //ConcreteBuilder 是对product进行元件部分的建造 private Product product = new Product();; @Override public void builderHead() { product.add("fat head"); } @Override public void builderLHand() { product.add("fat Lhand"); } @Override public void builderRHand() { product.add("fatRhand"); } @Override public void builderLfOOT() { product.add("fatLfoot"); } @Override public void builderRFoot() { product.add("fat Rfoot"); } @Override public Product getResult() { return product; } }
实现接口,瘦的建造类
package com.jing.builder; public class PersonThinConcreteBuilder implements PersonBuilder{ //ConcreteBuilder 是对product进行元件部分的建造 private Product product = new Product(); @Override public void builderHead() { product.add("thin head"); } @Override public void builderLHand() { product.add("thin hand"); } @Over 4000 ride public void builderRHand() { product.add("thin hand"); } @Override public void builderLfOOT() { product.add("thin foot"); } @Override public void builderRFoot() { product.add("thin foot"); } @Override public Product getResult() { return product; } }
零件都有了。这时我们需要指挥官指挥流程!!!!!注意:指挥官是只负责指挥!指挥官是只负责指挥!指挥官是只负责指挥!重要的事情讲三遍!!
package com.jing.builder; public class PersonDirector { //具体的产品生产交给Director来处理指挥 返回值是空 指挥官仅仅作为指挥 不负责制造 public void constructNormalPerson(PersonBuilder builder){ builder.builderHead(); builder.builderLfOOT(); builder.builderLHand(); builder.builderRFoot(); builder.builderRHand(); } }
实现的细节都再具体的builder里面。
package com.jing.builder; public class Main { public static void main(String[] args) { PersonDirector director = new PersonDirector();//指挥官 PersonBuilder fatBuilder = new PersonFatConcreteBuilder();//制造厂 PersonBuilder thinBuilder = new PersonThinConcreteBuilder();//制造厂 director.constructNormalPerson(fatBuilder);// 指挥官指挥fatBuilder制造正常人类 Product fatPerson = fatBuilder.getResult();//获取产品 fatPerson.show(); director.constructNormalPerson(thinBuilder); Product thinPerson = thinBuilder.getResult(); thinPerson.show(); } }
建造者模式就是这样子了。。。
相关文章推荐
- java 高级for循环
- JCo 在Java中调用ABAP服务
- java Arrays工具类
- Spring Remoting: Burlap--转
- Java泛型-类型擦除
- Spring Remoting: Hessian--转
- java命令
- java Collections集合工具类
- 64位win7环境eclipse集成svn后出现Failed to load JavaHL Library的解决办法
- springmvc的handle method 方法
- 一个刚入门的菜鸟Java之路-框架篇
- 使用JDK的native2ascii转码
- DOCTYPE声明 struts2与struts1区别
- Java unicode中文编码转换和反转
- eclipse下使用java api 进行hbase的常用的操作所需的jar包,以及如何查看java build path下的jar是否使用
- cloudsim仿真算法研究之二
- java socket编程
- Java中的抽象类和接口
- java经典编程300例
- Java垃圾回收机制