Android移动架构汇总
1、定义
将一个复杂的构建与他的表示分离,使同样的构建过程可以创建不同的表示。通俗的讲,将对象的复杂创建和对象的使用分离开,这样对象的创建时可以定制不同的类型的属性,而对象的使用只关注于调用。
2、角色
以找房子为例,进行说明:
抽象建造者:给出一个抽象的接口,定义了各个工人所需要进行的工作。这些工作是为了完成对房子的创建,就像工地会有指导手册一样。
/**
* 建造者角色
* 工人接口,定义了各个工人所需要进行的工作
* 并不负责具体的建造
*
* 同时房子是具体的(农民工)建造的 所以需要有返回房子的方法
* @author tucheng
*
*/
public interface Build {
public void makeWindow();public void makeFloor();public Room getRoom();}
具体建造者:具体建造者,具体的建造者(农民工)去造房子。房子造完后需要将房子还给房屋主人,所以要有返回房子的方法。
public class WorkBuilder implements Build{private Room room=new Room();@Overridepublic void makeWindow() {room.setFloor("地板 ");}@Overridepublic void makeFloor() {room.setWindow("窗户");}@Overridepublic Room getRoom() {return room;}}
设计者(指导者):
他知道房子怎么设计
他会只会工人去建造-换做程序代码中,他也肯定会持有工人的这个对象的引用
对工人所具备的能力和行为有很深的了解。
从整体角度出发,什么样的房子都能跟你建成。他所有具备的功能可以覆盖你完整的需求。哪怕业主只提出建个非常简单的房子,但是他所具备的能力必须全部覆盖-代码中:所有提出的需求在设计者这个类里面都能找得到。
public class Designer {public void order(Build build)
{build.makeFloor();build.makeWindow();
}}
产品(房子):
房子会有那些属性
public class Room {private String window;private String floor;public String getWindow() {return window;
}public void setWindow(String window) {this.window = window;
}public String getFloor() {return floor;
}public void setFloor(String floor) {this.floor = floor;
}@Override
public String toString() {// TODO Auto-generated method stubreturn "---->floor "+floor+" window "+window;
}}
创建对象:
public static void main(String[] args){Build worker = new WorkBuilder();Designer designer = new Designer();designer.order(worker);System.out.print(">>> "+worker.getRoom());
}
3、使用场景
复杂的对象
不同的表示方法
在实际的使用场景中,可能不会严格按照上述的模式进行设计,如通常没有抽象建造者和设计者,具体建造者中会有一个内部类保存设置的属性
建造者:
public class WorkBuilder {private RoomParams params;public WorkBuilder(){params = new RoomParams();
}public WorkBuilder makeWindow(String window){params.window = window;return this;
}public WorkBuilder makeDoor(String door){params.door = door;return this;
}public WorkBuilder makeChat(String chat){params.chat = chat;return this;
}public WorkBuilder makeFloor(String floor){params.floor = floor;return this;
}public Room build(){Room room = new Room();room.apply(params);return room;
}class RoomParams{public String window;public String floor;public String door;public String chat;
}
}
产品:
public class Room {private String window;private String floor;private String door;private String chat;public void apply(WorkBuilder.RoomParams params){window = params.window;floor = params.floor;door = params.door;chat = params.chat;
}}
使用:
WorkBuilder builder = new WorkBuilder();
Room room = builder.makeChat("椅子")
.makeDoor("门")
.makeFloor("地板")
.makeWindow("窗户")
.build();
4、常见的使用场景
AlterDialog

移动架构11_建造者模式相关推荐

  1. php设计模式 - 建造者模式

    为什么80%的码农都做不了架构师?>>>    <?php /*** 建造者模式* * 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 */ clas ...

  2. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

  3. 深入理解建造者模式 ——组装复杂的实例

    历史文章回顾: 设计模式专栏 深入理解单例模式 深入理解工厂模式 历史优质文章推荐: 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就 ...

  4. Java设计模式之创建型:建造者模式

    一.什么是建造者模式: 建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程:通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来, ...

  5. Java描述设计模式(06):建造者模式

    一.生活场景 基于建造者模式,描述软件开发的流程. 1.代码实现 /*** 基于建造者模式描述软件开发*/ public class C01_InScene {public static void m ...

  6. 常用设计模式系列(四)—建造者模式

    第一节 前言 "山不在高,有仙则名.水不在深,有龙则灵.斯是陋室,惟吾德馨.苔痕上阶绿,草色入帘青.谈笑有鸿儒,往来无白丁.可以调素琴,阅金经.无丝竹之乱耳,无案牍之劳形.南阳诸葛庐,西蜀子 ...

  7. 【设计模式】建造者模式

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

  8. 23种设计模式之单例模式、工厂模式、原型模式、建造者模式

    系列文章目录 第一章:程序设计原则-单一职责.接口隔离.依赖倒置.里式替换 第二章:程序设计原则-开闭原则.迪米特法则.合成复用原则 文章目录 系列文章目录 一.设计模式简单介绍 1.1.什么是设计模 ...

  9. Myabtis源码分析五-Mybatis配置加载完全图解,建造者模式的使用,涵盖Java各种技术栈

    private SqlSessionFactory sqlSessionFactory; @Before public void init() throws IOException { //----- ...

最新文章

  1. PostgreSQL在win7上安装详细步骤
  2. 【jenkins】jenkins按分支build和email
  3. python+OpenCV图像处理(十一)图像轮廓检测
  4. 360团队 临时目录的原始文件不是360合法文件_谈谈腾讯电脑管家小团队版
  5. 为iOS Vision盒子架构建Core ML管道(五)
  6. 普通程序员,如何转型大数据相关方向?
  7. 熊猫删除重复行– drop_duplicates()函数
  8. C++自定义函数类型——typedef的使用
  9. 红帽linux系统解压,linux redhat 红帽 centos 压缩 解压缩
  10. 关于代码运行速度与cpu关系的一点小事
  11. 相机标定:从世界坐标系到图像像素坐标系转换过程解析
  12. Unity XLua学习笔记(四):Hotfix热补丁
  13. 爬mei紫图最后代码2015-2019-1-14全部
  14. 邮件退回 对方服务器不允许,主 题:我给别人发的邮件被退回来了如何处理?...
  15. Qt QSqlQueryModel详解
  16. BurpSuite 基本使用之暴力破解
  17. C语言—指针数组与数组指针
  18. 10. 从0学ARM-基于Exynos4412的pwm详解
  19. Tableau表计算(2):计算依据
  20. html5页面上下分栏,HTML5+CSS3 分栏效果

热门文章

  1. 使用fastText实现文本分类-java版
  2. 基于J2EE的B2C电子商务系统开发与实现
  3. vue 移动端歌词实时滚动及优化
  4. 【Python】pyecharts 数据可视化模块
  5. pandas将df赋值到另一个df_Python/Pandas:如果匹配的話,將一個df的值添加到另一個df的行的末尾...
  6. R 散点图,添加标签
  7. 计算机毕业设计 SSM学校图书借阅管理系统 图书馆借阅管理系统 图书借阅系统Java
  8. python 爬虫-养生之道
  9. fastnest怎么一键排版_我的妈呀!一键排版也太好用了吧!3秒钟搞定排版!
  10. 响铃:社交型流量平台,为何线上平台都扎堆去线下造节