(二)Builder模式&原型模式

Builder模式

1、Builder模式介绍

Builder模式是一步一步创建一个复杂对象的创建型模式,允许用户在不知道内部构建细节的情况下,精细地控制对象的构造流程,使构建过程和部件的表示隔离#开来,使两者之间的耦合降到最低

2、Builder模式的使用场景

(1)相同的方法,不同的执行顺序,产生不同的事件结果时
(2)产品类较为复杂,参数较多,且很多参数都具有默认值
(3)多个部件或零件都可以装配到一个对象中,但是产生运行结果又不相同时

3、Builder模式的实现方法

通过具体的对象来构造抽象类,通过一个Director来封装构建复杂产品对象的过程,对外隐藏构建细节,则利用Buider和Director一起构建复杂且不同的对象,在实际开发过程中则经常忽略Director这个类,取而代之的是
new TestBuilder().setA(“A”).setB(“B”).create()

4、Andriod源码中Builder模式实现

(1)在Andriod源码中的AlertDialog.Builder的源码中,通过Builder来组装Dialog的各个部分,如title、buttons、Message等,将Dialog的构造和表示进行分离,通过在AlertDialog类中建立一个Builder来实现Builder模式,再在里面加入了一个apply函数来实现默认值的添加

5、Builder模式的优点及缺点

优点:良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节,独立容易拓展
缺点:会产生多余对象,消耗内存

原型模式

1、原型模式介绍

原型模式是一个创建型的模式。原型模式表明该模式应该有一个样板实例,用户从对象中复制出一个内部属性一致的对象,这个过程是我们俗称的克隆

2、原型模式的使用场景

(1)类初始化需要消化非常多的资源,通过原型拷贝避免这些消耗
(2)通过new产生一个对象需要非常繁琐的数据准备或访问权限,可用原型模式
(3)一个对象需要给其他对象访问,而且各个调用者可能需要修改其值,可以拷贝多个对象,即保护性拷贝
||再调用clone()函数时不一定比new操作速度快,只有new成本较高时才有效率上的提升,需注意在原型模式下不一定要实现cloneable接口,也有其他实现方式

3、原型模式的实现方式
/*
 *类充当一个ConcretePrototype角色,克隆接口则充当prototype
 *原型角色
 */
 public class WordDocument implements Cloneable {
       private String mText;
       private ArrayList<String>mImages 
       = new ArrayList<String>();
       @Override
       protected WordDocument clone(){
      try{
       WordDocument doc = (WordDocument)super.clone();
       doc.mText = this.mText;
       doc.mImages = this.mImages;
       return doc;
      }catch(Exception e){}
      return null;
      }
      //getter and setter
      }
   
 使用方法WordDocument doc = orignDoc.clone();

这种实现方法为浅克隆,就是如果在一个对象中改变它的属性,则它克隆出来的复制品的属性也相应进行更改,因为浅克隆只是单纯引用的形式,如果需要改为深拷贝,则要将里面的mImages对象也调用其clone函数,尽量使用深拷贝则可以避免操作副本时影响原始对象的问题

4、Andriod源码中的原型模式实现

比如Intent的拷贝构造函数是通过每个属性new一次从而实现对象拷贝的

5、原型模式的实际应用

通过返回一个克隆的对象,限制修改,不对外开放,从而保证就算修改了这个对象,也不会影响最初的已登录用户对象,而保证只有同一个包才能访问这个包的私有方法,确保其安全性

6、原型模式优点缺点

优点:原型模式是在内存中二进制流的拷贝,比new好很多,在循环体内产生大量对象时,更好体现这一优点
缺点:直接进行拷贝构造函数不会执行,这个即是优点又是缺点,优点减少了约束,缺点也是减少了约束

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值