JAVA设计模式 Build 模式
来源:互联网 发布:手机淘宝补差价 编辑:程序博客网 时间:2024/05/22 15:23
Builder模式介绍
Builder模式是一步一步创建一个复杂对象的创建性模式,他允许用户在不知道内部构建细节的情况下,可以更加准确的控制对象的构造流程,该模式是为了将构建复杂对象过程和他的部件解耦使得构建过程和部件的表示隔离开来
Builder 模式的定义
将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示
Builder 模式的使用场景
(1)相同的方法,不同的执行顺序,产生不同事件结果时
(2)多个部件或零件,都可以装配到一个对象中,但是产生的运行结果不同时
(3)产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用,这个时候使用建造者模式非常适合
(4) 当初始化一个对象非常复杂,如参数多,且很多参数都有默认值时
根据上面图片,写一个简单代码
product角色public abstract class ComPuter { private String mBoard; private String mDisplay; public String mOS; protected ComPuter() { } //主机 public void setBoard(String board) { this.mBoard = board; } //显示器 public void setDisplay(String display) { this.mDisplay = display; } //操作系统 public abstract void setOS(); @Override public String toString() { return "mboard=" + mBoard + "display=" + mDisplay + "OS=" + mOS; }}
具体的productpublic class MacBook extends ComPuter { public MacBook() { } @Override public void setOS() { mOS = "Mac OS"; }}
抽象Builder类public abstract class Builder { //设置主机 public abstract Builder buildBoard(String board); //设置显示器 public abstract Builder buildDisplay(String display); //设置操作系统 public abstract Builder buildOS(); //创建Computer public abstract ComPuter create();}
具体builder类public class MacBookBuilder extends Builder { private ComPuter mComPuter = new MacBook(); @Override public Builder buildBoard(String board) { mComPuter.setBoard(board); return this; } @Override public Builder buildDisplay(String display) { mComPuter.setDisplay(display); return this; } @Override public Builder buildOS() { mComPuter.setOS(); return this; } @Override public ComPuter create() { return mComPuter; }}
具体构造类,负责构造Computerpublic class Director { private Builder mBuilder = null; public Director(Builder builder) { mBuilder = builder; } //构建对象 public void construct(String board, String display) { mBuilder.buildBoard(board); mBuilder.buildDisplay(display); mBuilder.buildOS(); }}
具体调用public class BuildActivity extends BaseActivity { @Override public int setMainView() { return R.layout.activity_build; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToobarTitle("Build 模式"); MacBookBuilder macBookBuilder = new MacBookBuilder(); Director director = new Director(macBookBuilder); director.construct("因特尔主机", "三星显示屏"); TextView textView = (TextView) findViewById(R.id.build_text); textView.setText(macBookBuilder.create().toString()); }}
最后屏幕打印出
mboard=因特尔主机display=三星显示屏OS=Mac OS
上述实例中,通过具体的MacbookBuilder来构建Macbook对象,而Director封装了构建复杂产品对象的过程,对外隐藏了构建细节。Builder与Director一起将一个复杂对象的构建与他的表示分离这样使得同样的构建过程可以构建不同的对象
值得注意的是,显示开发过程中,Director角色经常会被省略,而直接使用一个Builder来进行对象的组装,这个Builder通常为链式调用,他的关键点是每个setter方法都返回自身,也会是return this; 这样就使得setter方法可以链式调用,代码如下
public class BuildActivity extends BaseActivity { @Override public int setMainView() { return R.layout.activity_build; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToobarTitle("Build 模式"); //显示开发一般省去Director,用Builder进行链式调用 ComPuter comPuter = new MacBookBuilder().buildOS() .buildDisplay("三星显示屏") .buildBoard("没有主机") .create(); textView.setText(comPuter.toString()); }}
是不是很眼熟,对的系统的dialog创建设置也是这样做的。
阅读全文
0 0
- java build设计模式
- JAVA设计模式 Build 模式
- Build设计模式
- Java build模式
- 简单模拟Build设计模式
- 设计模式(1)—Build模式
- 设计模式之Build(生成者模式)
- 设计模式(7)-建造模式(Build)
- android设计模式之build模式
- 设计模式学习笔记(Build模式)
- Java的建造模式(Build)
- build 模式
- Build模式
- Build模式
- 设计模式之——build
- 设计模式-Factory,Abstract Factory,SingleTon,Build模式
- 一日一设计模式之C++篇(Build模式)
- java设计模式-观察者模式
- 越来越“荒”,资产端匮乏的P2P我们还有标投么
- c3p0-数据库连接池原理
- 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心
- 在mac上安装下pySpark,并且在pyCharm中python调用pyspark
- centos Linux安装eclipse
- JAVA设计模式 Build 模式
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- 每天一道LeetCode-----给定序列中2/3/4个元素的和为target的所有集合,或3个元素的和最接近target的集合
- 基于 webmagic 的知乎爬取[GitHub]
- *TEST 5 for NOIP 。。。
- WIFI基本知识整理
- php 编译
- 网页特效
- Python 多线程的三种创建方式