[Andriod设计模式之旅]——Builder模式
来源:互联网 发布:网络骗局如何报警 编辑:程序博客网 时间:2024/06/02 06:56
前言
具体介绍Builder设计模式之前,首先我们想一个问题。前段时间双十一室友组了台电脑,我们都知道电脑是一个非常复杂的组合体,里面有好多元件(CPU,硬盘,显示器,电源,显卡等等),不同的人对自己电脑的配置要求不同,但是得到的结果都是不同配置的一台电脑,那么这个过程怎么样封装使组件之间的耦合度降到最低,同时方便扩展。这时候就用到builder设计模式了。
一、Builder设计模式的使用场景
1、多个元件可以组装到一个对象里面,但是得到的结果又不相同时。
2、相同的方法,不同的执行顺序,但是产生的执行结果或作用不同时。
3、初始化一个非常复杂的对象,但是参数特别的而且还都有默认值。
二、Builder设计模式的定义
将一个复杂的构建对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
三、Builder设计模式的UML图
四、Builder设计模式的简单实现(以组装电脑为例)
/** * 电脑抽象类 * Created by leiqi on 2017/11/29. */public abstract class Cumputer { protected static String mBoard;//硬盘 protected static String mOS;//系统 protected static String mDisplay;//显示器 protected static String mGraphics;//显卡 protected static String mCPU;//CPU protected static String mPower;//电源 public Cumputer(){}; public static void setmBoard(String mBoard) { Cumputer.mBoard = mBoard; } public static void setmDisplay(String mDisplay) { Cumputer.mDisplay = mDisplay; } public static void setmGraphics(String mGraphics){Cumputer.mGraphics = mGraphics;} public static void setmCPU(String mCPU){Cumputer.mCPU = mCPU;} public static void setmPower(String mPower){Cumputer.mPower = mPower;} public abstract void setmOs(); @Override public String toString(){ return "This Cumputer is ["+"\n\t\t\t硬盘:"+mBoard +"\n\t\t\t显示器:"+mDisplay +"\n\t\t\t系统:"+mOS +"\n\t\t\t显卡:"+mGraphics +"\n\t\t\tCPU:"+mCPU +"\n\t\t\t电源:"+mPower +"\n\t\t]"; }}
上面时电脑的抽象类,除此外我们还需要有:
/** * Created by leiqi on 2017/10/29. */public class MacBookAir extends Cumputer { protected MacBookAir(){ } @Override public void setmOs() { mOS = "(黑苹果)MAC OS 11.0"; }}
/** * Created by leiqi on 2017/10/29. */public abstract class Builder { protected abstract void buildBoard(String board); protected abstract void buildDisplay(String display); protected abstract void buildOS(); protected abstract void buildCPU(String cpu); protected abstract void buildGraphic(String graphic); protected abstract void buildPower(String power); protected abstract Cumputer create();}
/** * Created by leiqi on 2017/10/29. */public class MacBookAirBuilder extends Builder { private Cumputer cumputer = new MacBookAir(); @Override protected void buildBoard(String board) { cumputer.setmBoard(board); } @Override protected void buildDisplay(String display) { cumputer.setmDisplay(display); } @Override protected void buildOS() { cumputer.setmOs(); } @Override protected void buildCPU(String cpu) { cumputer.setmCPU(cpu); } @Override protected void buildGraphic(String graphic) { cumputer.setmGraphics(graphic); } @Override protected void buildPower(String power) { cumputer.setmPower(power); } @Override protected Cumputer create() { return cumputer; }}
/** * Created by leiqi on 2017/10/29. */public class Director { Builder mbuider; public Director(Builder builder){ mbuider = builder; } public void contruct(String board,String display,String cpu,String graphic,String power){ mbuider.buildBoard(board); mbuider.buildDisplay(display); mbuider.buildCPU(cpu); mbuider.buildGraphic(graphic); mbuider.buildPower(power); mbuider.buildOS(); }}
使用时只需要传入不同参数即可:
/** * Created by leiqi on 2017/12/10. */public class Test { public static void main(String[] args) { MacBookAirBuilder bookAirBuilder = new MacBookAirBuilder(); new Director(bookAirBuilder).contruct("三星固态硬盘", "三星显示器", "英特尔i7处理器", "NVIDIA", "金河田"); System.out.print(bookAirBuilder.create().toString()); }}
以上的输出结果如下:
五、Builder模式在Android中的使用
Builder设计模式在Android中的使用也是比较常见的,其中最为典型的该属于AlterDialog,其次网络请求框架,Okhttp和Retrofit也是使用Builder设计模式。
阅读全文
0 0
- [Andriod设计模式之旅]——Builder模式
- Android设计模式之—Builder模式
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之 builder
- AutoCAD .Net 监测工作空间变化
- bzoj1012
- C/C++ -- 分析++和--
- 简要介绍python
- leetcode题解-2. Add Two Numbers
- [Andriod设计模式之旅]——Builder模式
- 基础知识总结
- 十个能让你成为牛逼前端程序猿的特征
- learn python the hard way (personal) -- Ex0
- AutoCAD .Net 不同文档间复制对象
- Batch Normalize的几点说明
- linux就该这么学:rhce考试经验分享
- vs2008 c++ 使用NI的Measurement Studio工具 编译不过
- 隐式Intent的其它用法