java设计模式之原型

一.介绍

原型模式:就是允许一个对象可以创建另外一个可以定制的对象,根本无需直到任何创建对象的细节,工作原理是:通过将一个原型对象传给另外一个发动创建的对象,这个发送创建的对象通过请求原型对象拷贝它们自己来创建.
在使用了java的clone()方法之后,也就是自己传给自己,自己调用自己,自己复制一个自己
类图

二.代码

public class MainTest {

    public static void main(String[] args) {
        Concret concret = Concret.getInstance();
        Concret clone =(Concret) concret.clone();
        System.out.println(clone.str);

    }
}
abstract class ProtoType implements Cloneable {
    @Override
    public ProtoType clone() {
        try {
            return (ProtoType) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }
}
// 使用了单例设计模式
class Concret extends ProtoType {
    String str = "a";
    private static Concret concret = new Concret();
    public static Concret getInstance() {
        return concret;
    }
    private Concret() {}

}
output 
false
上述的代码该类为单例设计模式,很明显的原型模式打破了单例设计模式只能创建一个对象的约束.

三.特点

  • 扩展性,圆形类是抽线的,它允许其他的类继承本类,又因为每个类的创建由本类自己完成,这样其他的类的添加不影响整个结构;
  • 简单,相比较于工厂设计模式,它更简单;
  • Prototype模式具有一个给应用软件动态加载新功能的能力,由于它的独立性高,很容易加载新功能而不影响原先的功能;
  • 产品类不需要有任何实现确定的等级结构,它适用于任何等级结构;
  • 每个类都必须配备一个clone方法,对于新类来说很简单,但是对于已经存在的类进行改造时,不一定是容易的事;
  • 高效率,相对于直接new对象,还需要给对象添加状态和属性,我们使用原型模式有更高的效率,不只是在运行效率(直接使用二进制复制对象),还是编码效率(不需要给对象添加属性);

四.实现原理

  • 使用原型管理器,体现在一个系统中的原型数目不固定时,可以动态的创建和销毁;
  • 实现克隆操作;
  • 隔离对象的使用者和具体类型之间的耦合关系,为需要克隆操作的对象提供稳定的接口

五.适用性

  1. 当一个系统应该独立于它的产品创建,构成和表示时;
  2. 当要实例化的类是在运行时指定的;
  3. 为了避免创建一个产品层次的工厂;
  4. 当一个类的实例只有有几种状态的组合时;

六.总结

  • java中的clone方法不使用构造方法,直接在内存中使用二进制的方式复制一份对象出来,所以clone方法不受到构造方法的限制;
  • 关于浅克隆与深克隆,本人使用java1.8,在此环境下,java内部实现了深层次的克隆.以后浅克隆也会消失在我们的视线里.注意自己使用java的版本即可;
  • 我回顾了下自己的代码,有许多地方,一个for循环中去new对象,我们完全可以使用原型模式来代替这种new对象的方式,当然我们需要实现cloneable接口;
  • 许多时候我们已经有了一个类,并且有了继承关系,这个时候往往实现cloneable接口去实现复制功能会更方便和简单,不过这样需要修改本类的原码.

七.参考文献

大话设计模式


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值