对建造者模式的总结
来源:互联网 发布:edu域名查询 编辑:程序博客网 时间:2024/05/18 20:47
建造者模式:
需求:给定产品对象、建造对象、导演对象,使得产品对象通过建造对象与导演对象这两个对象的干预组合出客户最终所要的产品
其中建造对象与导演对象互不干预
设计方法:
首先设计出产品类,并构造其属性的getset方法
public class Product { private String type; private String name; private List<String> list; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; }}
再设计出建造者的抽象类,抽象类中一般包含产品建造部分和一个产品的返回
public abstract class Builder { public abstract void setTopPart(); public abstract void setMiddlePart(); public abstract void setBottomPart(); public abstract Product getProduct();}
设计具体的建造方案,使这些方案类继承抽象类,这样即可在建造完成产品后通过返回方法将产品返回
public class ConcreteBuilderA extends Builder { private List<String> list = new ArrayList<String>(); private Product product = new Product(); @Override public void setTopPart() { // TODO Auto-generated method stub product.setType("long"); } @Override public void setMiddlePart() { // TODO Auto-generated method stub product.setName("hair"); } @Override public void setBottomPart() { // TODO Auto-generated method stub list.add("I'm an artist"); product.setList(list); } @Override public Product getProduct() { // TODO Auto-generated method stub return product; }}public class ConcreteBuilderB extends Builder { private List<String> list = new ArrayList<String>(); private Product product = new Product(); @Override public void setTopPart() { // TODO Auto-generated method stub product.setType("deep"); } @Override public void setMiddlePart() { // TODO Auto-generated method stub product.setName("dark"); } @Override public void setBottomPart() { // TODO Auto-generated method stub list.add("Fantasy"); list.add("That's good"); product.setList(list); } @Override public Product getProduct() { // TODO Auto-generated method stub return product; }}
设计导演类,创建一个私有的建造者对象,在定义的组装方法中选择想组装的部分,然后调用返回方法
对该建造者对象构造set方法
public class Directer { private Builder builder; public Product construct() { builder.setTopPart(); builder.setBottomPart(); return builder.getProduct(); } public void setBuilder(Builder builder) { this.builder = builder; }}
最后在客户端中,创建导演、建造方案实例,通过导演选择方案,由导演执行完方案后返回最终产品
public class Client { public static void main(String[] args) { Directer directer = new Directer(); Builder builderA = new ConcreteBuilderA(); directer.setBuilder(builderA); Product product = directer.construct(); System.out.println(product.getList().get(0)+product.getName()); }}
思考:
以上为建造者模式的基本思路,在实际应用中,产品对象、建造对象、导演对象均可以有多个
当产品对象的属性发生改变时,不一定要更改建造者的抽象类,可以重新设计一个建造方案类来继承建造者的抽象类
当建造者的抽象类中改变了普通方法或抽象方法的方法名时,导演类如果有对应的对象在调用时也需要更改
该模式在更改具体的建造方案的方法时,不需要对其他模块进行更改
阅读全文
0 0
- 对建造者模式的总结
- 对建造者模式的理解
- 建造者模式总结
- 设计模式--对建造者模式的思考
- 个人对设计模式的理解-->建造者模式
- 谈谈我对Builder建造者模式的想法
- 对设计模式-建造者(Builder)的理解
- 建造者模式(三):关于Director的进一步讨论,建造者模式总结
- 总结:Java设计模式-------建造者模式
- 建造者模式-Builder Pattern 复杂对象的组装与创建——建造者模式(三):关于Director的进一步讨论,建造者模式总结
- 建造者模式的设计
- 建造者模式的实现
- Java建造者模式,Android建造者模式的AlertDialog
- 对 工厂模式与建造者模式 的个人理解,以及结合运用
- java的设计模式 建造者模式
- 【有毒的设计模式】建造者模式
- Android的设计模式-建造者模式
- 对 桥接模式 的个人理解,以及与 工厂方法模式、建造者模式 的结合运用
- Server-Sent Events和WebSocket服务器向浏览器推送信息
- openstack安装学习(环境)
- 利用tf.truncated_normal与tf.random_normal进行张量初始化的详解
- 对String在多线程中的一些简单认识
- 各主流浏览器之间的兼容性-JS篇
- 对建造者模式的总结
- 解决Xcode 8以后的Alcatraz等插件不可用
- PAT (Advanced Level) Practise1133Splitting A Linked List (25)
- 有序的Map集合--LinkedHashMap
- JavaScript学习笔记_Reduce和Transduce
- 简单存储过程的编写
- java日期格式中MMM的问题
- HttpClient
- Python + opencv 实现图片马赛克