设计模式(5)-原型模式

简介

为什么要使用原型模式

用于创建重复的对象。当直接创建对象代价比较大时,使用此模式。

什么是原型模式

原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

类型

对象创建型模式

角色

角色

  • Prototype,抽象原型类
    • 声明克隆方法的接口。
    • 是所有具体原型类的公共父类。
    • 可以是抽象类也可以是接口,甚至还可以是具体实现类。
  • ConcretePrototype,具体原型类
    • Prototype的具体原型类。
    • 实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。
  • Client,客户类
    • 通过调用该对象的克隆方法即可让一个原型对象克隆自身从而创建一个新的对象,得到多个相同的对象。

UML类图

prototype.png

实现

  • 创建抽象原型类Prototype.java
  • 创建具体原型类ConcretePrototype.java
  • 创建测试类客户类Client.java

Prototype.java

interface Prototype {
    public Prototype clone();
}

ConcretePrototype.java

class ConcretePrototype implements Prototype, Cloneable {
    public ConcretePrototype clone() {
        ConcretePrototype prototype = null;
        try {
            prototype = (ConcretePrototype) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return prototype;
    }

    public void show() {
        System.out.println("ConcretePrototype1:{}" + this.toString());
    }
}

测试类
Client.java

public class Client {
    public static void main(String[] args) {
        ConcretePrototype cp = new ConcretePrototype();
        for (int i = 0; i < 5; i++) {
            ConcretePrototype clonecp = (ConcretePrototype) cp.clone();
            clonecp.show();
        }
    }
}

测试

ConcretePrototype1:{}com.chinatvpay.prototype.ConcretePrototype@6bd46c20
ConcretePrototype1:{}com.chinatvpay.prototype.ConcretePrototype@4706e02e
ConcretePrototype1:{}com.chinatvpay.prototype.ConcretePrototype@14681070
ConcretePrototype1:{}com.chinatvpay.prototype.ConcretePrototype@3c0f3387
ConcretePrototype1:{}com.chinatvpay.prototype.ConcretePrototype@a0002df

优缺点

优点

  • 性能高。使用原型模式克隆对象比直接new一个对象性能高。

缺点

  • 原型模式和单例模式是冲突的。

适用环境

  • new一个对象时需要耗费很大的资源。

使用场景

待补充

问题

克隆出的对象和被克隆的对象有何不同?
内存地址是不同的。对克隆出的对象做修改不会对被克隆的对象产生任何影响。

在软件开发中,你在哪里用到了原型模式?

待补充。

创建型模式讲到这里就结束了,下一篇文章对最近所学的创建型模式做阶段性总结。
传送门:设计模式-创建型模式总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值