二、Builder设计模式
来源:互联网 发布:unity3d脚本教程基础 编辑:程序博客网 时间:2024/05/17 22:51
1. Builder模式的介绍
将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。
2. Builder模式使用场景
- 相同的方法,不同的执行顺序,产生不同的事件结果时。
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
- 产品类型非常复杂,或者产品类中调用顺序不同产生了不同的作用,这个使用建造者模式非常适合。
- 当初始化一个对象特别复杂,如参数多,且很多参数都有默认值时。
3. Builder模式的UML类图
4. Builder模式Java代码
计算机的组装比较复杂,组装顺序是不固定的。将计算机的组装的过程简化为构建主机、设置操作系统、设置显示器3个部分,然后通过Director和具体的Builder来构建计算机对象。
- 1.计算机抽象类:Product角色
public abstract class Computer { protected String mBorad; protected String mDisplay; protected String mOs; protected Computer() { } //设置主板 public void setBorad(String borad) { this.mBorad = borad; } //设置内存 public void setDisplay(String display) { this.mDisplay = display; } //设置操作系统 public abstract void setOs(); @Override public String toString() { return "Computer{" + "mBorad='" + mBorad + '\'' + ", mDisplay='" + mDisplay + '\'' + ", mOs='" + mOs + '\'' + '}'; } }
- 2.具体的Computer类,Macbook
public class MacBook extends Computer { protected MacBook() { } @Override public void setOs() { mOs = "Mac OSX X 10.0"; } }
- 3.抽象Builder类:
public abstract class Builder { //设置主机 public abstract void buildBorad(String borad); //设置显示器 public abstract void buildDisplay(String display); //设置操作系统 public abstract void buildOs(); public abstract Computer create(); }
- 4.具体的Builder类:
public class MacBookBuilder extends Builder { private Computer mComputer = new MacBook(); @Override public void buildBorad(String borad) { mComputer.setBorad(borad); } @Override public void buildDisplay(String display) { mComputer.setDisplay(display); } @Override public void buildOs() { mComputer.setOs(); } @Override public Computer create() { return mComputer; } }
- 5.Director类,负责构造Computer
public class Director { Builder mBuilder = null; public Director(Builder builder) { this.mBuilder = builder; } public void construct(String board, String display) { mBuilder.buildBorad(board); mBuilder.buildDisplay(display); mBuilder.buildOs(); } }
- 6.测试代码:
public class Test { public static void main(String[] args) { Builder macBookBuilder = new MacBookBuilder(); //Director Director director = new Director(macBookBuilder); director.construct("英特尔主板", "Retina显示器"); System.out.println("Computer Info: " + macBookBuilder.create().toString()); } }
- 7.注意:
以上代码中,通过具体的MacbookBuilder来构建MacBook对象,而Director封装了构建复杂产品产生的过程,对外隐藏了细节。
在现实开发过程中,Director角色经常会被忽略。而直接使用一个Builder来进行对象的封装,这个Builder通常为链式调用,关键点是每个setter方法都返回自身。
new TestBuidler.setA(“A”).setB(“B”).create();
5. Builder模式在Android系统中
在Android源码中,最常用到的Builder模式就是AlertDialog.Builder,使用该Builder来够加你复杂的AlertDialog对象。
6. 总结
Builder 模式在Android开发中也较为常用,通常作为配置类的构建器将构建和表示分离开来,同时也是将配置从目标类中分离出来,避免过多的setter方法。Builder模式比较常见的实现方式是通过调用链实现,这样使得代码更简洁。
0 0
- 二、Builder设计模式
- 设计模式(二)-Builder模式
- 设计模式总结-Builder模式(二)
- 《每日编程》----《设计模式》----《二》----builder模式
- Android设计模式(二)- Builder模式
- 设计模式笔记(二)----Builder模式
- 三、设计模式之二----Builder模式
- 设计模式之二:Builder模式
- 设计模式之C#实现(二)---Builder
- 设计模式之C#实现(二)---Builder
- 设计模式笔记--创建型模式之二 Builder
- 浅谈设计模式之二——Builder模式
- 设计模式系列二——Builder模式
- 面向对象的设计模式(二),Builder模式
- 设计模式:Builder模式
- 设计模式 -- BUILDER模式
- 【设计模式】Builder模式
- 设计模式-Builder模式
- 【BZOJ1283】序列【最大费用最大流】
- Android开发内存泄露之--Handler引起的内存泄露
- java类初始化顺序-阿里笔试题
- Dom解析xml文件
- C# WPF中DataGrid的数据绑定(Binding)
- 二、Builder设计模式
- C++程序员面试总结
- BJFU ACM Online Judge 1549
- Oracle与SQL Server数据库的异同
- java路径改不过来的原因和解决办法
- 从玩摄影到学易语言再到PHP,我大学这几年的经历
- android系统调式步骤
- 移动web滑动效果Swipe JS插件
- 郭大侠与线上游戏(set)