Android设计模式之建造者设计模式
来源:互联网 发布:迪奥旷野香水知乎 编辑:程序博客网 时间:2024/05/21 17:30
建造者设计模式和工厂类设计模式有很多相似的地方,但非常重要的一点:建造者模式注重基本方法的调用顺序安排,而工厂类则侧重于创建对象.
1.关于建造者的几个概念:
①Builder:是一个抽象接口,规范建造者对于生产的产品的各个组成部分的建造。这个接口只是定一个规范,不涉及具体的建造,具体的建造让继承于它的子类(ConcreteBuilder)去实现。
②、ConcreteBuilder:实现builder接口,针对不同的商业逻辑,具体化各对象部分的建造,最后返回一个建造好的产品。
③、Director:导演类,负责安排已有模块的顺序。在指导中不涉及产品的创建,只负责保证复杂对象各部分被创建或按某种顺序创建。
④、Product:产品类。
先上代码:
产品类的抽象类:
package com.dgtech.builder;import java.util.ArrayList;public abstract class Person { //决定人起床后做各种事情的顺序 public ArrayList<String> sequence = new ArrayList<String>(); //吃饭 public abstract void eat(); //洗脸 public abstract void wash(); //上厕所 public abstract void wc(); //人起床后会按照不同的顺序做不同的事 public void afterGetUp(){ for (int i = 0; i < sequence.size(); i++) { if("eat".equals(sequence.get(i))){ eat(); }else if("wash".equals(sequence.get(i))){ wash(); }else if("wc".equals(sequence.get(i))){ wc(); } } } public void setSequence(ArrayList<String> sequence){ this.sequence = sequence; }}
产品类的两个实现类
public class Man extends Person{ @Override public void eat() { System.out.println("男人吃米饭"); } @Override public void wash() { System.out.println("男人用肥皂洗脸"); } @Override public void wc() { System.out.println("男人上厕所很快"); }}public class Women extends Person{ @Override public void eat() { System.out.println("女人喝牛奶"); } @Override public void wash() { System.out.println("女人用洗面奶洗脸"); } @Override public void wc() { System.out.println("女人上厕所很慢"); }}
准备好了产品类,下面进入builder
builder的抽象类
import java.util.ArrayList;public abstract class Builder { //按照子类提供的顺序造人 public abstract void setsequence(ArrayList<String> sequence); //返回一个人 public abstract Person getPerson();}
builder抽象类的两个实现类
import java.util.ArrayList;public class ManBuilder extends Builder{ Man man = new Man(); public void setsequence(ArrayList<String> sequence) { man.setSequence(sequence); } public Person getPerson() { // TODO Auto-generated method stub return this.man; }}import java.util.ArrayList;public class WomenBuilder extends Builder{ Women women = new Women(); public void setsequence(ArrayList<String> sequence) { women.setSequence(sequence); } public Person getPerson() { // TODO Auto-generated method stub return this.women; }}
导演类:
package com.dgtech.builder;import java.util.ArrayList;public class Director { ManBuilder manBuilder = new ManBuilder(); WomenBuilder womenBuilder = new WomenBuilder(); ArrayList<String> sequence = new ArrayList<String>(); //创建A类型的男人,先吃饭再上厕所最后洗脸 public Man getAMan(){ sequence.clear(); sequence.add("eat"); sequence.add("wc"); sequence.add("wash"); manBuilder.setsequence(sequence); return (Man) manBuilder.getPerson(); } //创建B类型的男人,先上厕所再吃饭最后洗脸 public Man getBMan(){ sequence.clear(); sequence.add("wc"); sequence.add("eat"); sequence.add("wash"); manBuilder.setsequence(sequence); return (Man) manBuilder.getPerson(); } //当然后面可以创建各种不同类型的男人和女人,这里不再赘述}
client类(用户实现类):
public class Client { public static void main(String[] args) { Director director = new Director(); Man aMan = director.getAMan(); aMan.afterGetUp(); Man bMan = director.getBMan(); bMan.afterGetUp(); }}
输出结果:
男人吃米饭
男人上厕所很快
男人用肥皂洗脸
男人上厕所很快
男人吃米饭
男人用肥皂洗脸
记住关键点:不同的方法顺序生产不同的产品,这个是建造者设计模式的核心
一般用在步骤复杂的产品类创建上,比如不同的步骤创建出来的对象不同
0 0
- android设计模式之建造者模式
- Android设计模式之建造者模式
- Android设计模式之建造者设计模式
- 设计模式之建造者
- 设计模式 之 建造者
- 设计模式之建造者
- android 建造者设计模式
- Android设计模式之建造者模式builder
- Android设计模式之建造者模式(Builder Pattern)
- Android设计模式之建造者模式(builder pattern)
- Android设计模式之建造者模式(Builder Pattern)
- Android设计模式之建造者模式——AlertDialog
- 设计模式之建造者模式
- 设计模式之建造者模式
- 五 设计模式之建造者模式
- 设计模式之建造者模式
- C# 设计模式之 建造者模式
- 【设计模式】之 Builder 建造者模式
- Fix a Tree
- leetcode_[python/C++]_424_Longest Repeating Character Replacement
- Win10系统企业版如何免费永久激活?
- Ubuntu14.04 安装Caffe
- 求20000以内的自守数
- Android设计模式之建造者设计模式
- 云计算年度点评2015-2016
- 【Linux4.1.12源码分析】VXLAN之csum和remcsum实现分析(发包)
- Java IO流详尽解(一)
- Linux系统编程之模拟命令cp
- grails的domain继承之后生成的表结构
- 06-图2 Saving James Bond - Easy Version (25分)
- 内存优化之浅谈onLowMemory和onTrimMemory
- pandas处理数据加载、存储