建造者模式(生成器模式)
2016-06-02 15:05
351 查看
建造者模式
定义:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
类图
适用范围
1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2 当构造过程必须允许被构造的对象有不同表示时。
角色
1 builder:为创建一个产品对象的各个部件指定抽象接口。2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
例子
Product类public class Product { private String name; private String type; public Product() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
IBulid接口
public interface IBulid { IBulid setName(String name); IBulid setType(String type); Product createProduct(); }
ConcreteBuilder类
public class ConcreteBuilder implements IBulid { private Product product = new Product(); @Override public IBulid setName(String name) { product.setName(name); return this; } @Override public IBulid setType(String type) { product.setType(type); return this; } @Override public Product createProduct() { return product; } }
Director类
public class Director { private IBulid mBulid; public Product create(IBulid bulid) { bulid.setName("name"); bulid.setType("type"); return bulid.createProduct(); } }
程序入口MianActivity
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IBulid bulid = new ConcreteBuilder(); Director director = new Director(); Product product = director.create(bulid); Log.e("zhang", "onCreate: " + product.getName() + "=========" + product.getType()); //@by 2016/6/2 其实不用Director也可以,Director控制流程顺序 Product p = bulid.setName("eeeeee").setType("rrrrr").createProduct(); Log.e("zhang", "onCreate: " + p.getName() + "=========" + p.getType()); } }
Bulid作为Product内部类实现
public class Product { private String mName; private String mType; public Product() { } public String getName() { return mName; } public String getType() { return mType; } public class Bulid1 { public Bulid1() { } public Product.Bulid1 setName(String name) { mName = name; return this; } public Product.Bulid1 setType(String type) { mType = type; return this; } public Product create() { return Product.this; } } }
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Product.Bulid1 b = new Product().new Bulid1(); Product p1 = b.setName("zhangsan").setType("nan").create(); Log.e("zhang", "onCreate: " + p1.getName() + "=========" + p1.getType()); }
Bulid作为Product静态内部类实现
public class Product { private String mName; private String mType; public Product() { } public Product(Bulid1 bulid1) { mName = bulid1.mName; mType = bulid1.mType; } public String getName() { return mName; } public String getType() { return mType; } public static class Bulid1 { private String mName; private String mType; public Bulid1() { } public Product.Bulid1 setName(String name) { mName = name; return this; } public Product.Bulid1 setType(String type) { mType = type; return this; } public Product create() { return new Product(this); } } }
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Product.Bulid1 b = new Product.Bulid1(); Product p1 = b.setName("zhangsan").setType("nan").create(); Log.e("zhang", "onCreate: " + p1.getName() + "=========" + p1.getType()); } }
相关文章推荐
- Android应用开发之自动更新不用愁
- iOS开发UI篇—实现一个简单的手势解锁应用(基本)
- scala集合
- iOS 基础篇4—懒加载
- swift学习日志—— if let 与 guard 语法糖
- CSS绘图:墙
- Jquery图片上传大小限制
- LeetCode459. Repeated Substring Pattern
- JavaScript学习笔记(1)
- 有趣的数列[HNOI2009][Codevs2337]
- 学习内容DPDK
- iOS开发系列--UITableView全面解析
- C++ 引用
- Lua模拟继承行为
- Java随机抽取方法、去重的方法
- jquery Ajax 全局调用封装
- 缓存报错-初始化失败 ERROR [org.springframework.web.context.ContextLoader] - context initialization failed
- Android Studio中有用的快捷键栏
- js 操作cookie
- 利用adb 命令回到手机端某个app的页面