设计模式之原型模式

作为码农中的一员,需要不断的学习。我在学习之余把关于自己阅读《大话设计模式》的笔记和自己的一些总结 写成博客和大家分享,也希望采用这种方式记录自己的学习之旅。本文仅供学习交流使用,侵权必删。不用于商业目的,转载请注明出处。

原型模式

原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
这种模式是用于创建重复的对象,同时又能保证性能。它实现了一个原型接口,该接口用于创建与当前对象相似的新对象。当直接创建对象的代价比较大时,采用该模式。

原型模式的类图

原型模式

  • Prototype为原型类,继承了 Cloneable,定义了一些必须实现的接口。
  • ConcretePrototype为具体原型类,实现了原型类定义的接口,它是可以被复制的对象。

原型模式其实就是从一对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。

原型模式的代码

由于 Java 提供了对象的clone() 方法,所以用Java实现原型模式比较简单。

// 为 原型模式的 抽象原型
// Java 中要 实现克隆用 实现 Cloneable 接口
public interface Prototype extends Cloneable{
    public Object clone();
}
// 为具体原型类,是可以 被复制的对象
// 实现一个克隆自身的操作
public class ConcretePrototype implements Prototype {
    public ConcretePrototype() {
        System.out.println("具体原型创建成功");
    }
    @Override
    public Object clone() {
        Object p = null;
        try {
            p = (ConcretePrototype)super.clone();
        }catch (CloneNotSupportedException e){
            System.out.println("拷贝失败");
        }
        return p;
    }
}
public class Test {
    public static void main(String[] args) {
        // 创建一个 原型实例
        ConcretePrototype p1 = new ConcretePrototype();
        // 克隆原型实例
        ConcretePrototype c1 = (ConcretePrototype)p1.clone();
        // 输出两个实例 看是否相同
        System.out.println(p1);
        System.out.println(c1);
    }
}

在原型模式中复制分为 浅复制 和 深复制:
浅复制与深复制

  • 浅复制,被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
  • 深复制,把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。

原型模式的优缺点

优点

  • 减少频繁创建对象,性能得到了提高。
  • 避免了构造函数的约束。

缺点

  • 必须要实现Cloneable接口
  • 需要对一个类全面了解,对已经存在的类抽象了解不是很容易。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值