zoukankan      html  css  js  c++  java
  • 设计模式之七:Prototype(转)

    一、功能 

      用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 



      二、结构图

      三、优缺点

      优点:复制自身。客户不知道需要对象的实际类型,只需知道它的抽象基类即可。(即有继承树的情况) 

      缺点:必须先有一个对象实例(即原型)才能clone。

      四、示例代码

    class Prototype //抽象基类
    {
    public:
        virtual Prototype* Clone() = 0 ;
    } ;
    
    class ConcretePrototype1 : public Prototype
    {
    public:
        virtual Prototype* Clone()
        {
            ConcretePrototype1 *p = new ConcretePrototype1() ;
            *p = *this ; //复制对象
            return p ;
        }
    } ;
    
    class ConcretePrototype2 : public Prototype
    {
    public:
        virtual Prototype* Clone()
        {
            ConcretePrototype2 *p = new ConcretePrototype2() ;
            *p = *this ; //复制对象
            return p ;
        }
    } ;
    
    客户端代码:
    ConcretePrototype1 *obj1 = new ConcretePrototype1() ;//原型对象1
    ConcretePrototype2 *obj2 = new ConcretePrototype2() ;//原型对象2
    
    Prototype *newobj1 = obj1->Clone() ;//克隆对象1
    Prototype *newobj2 = obj2->Clone() ;//克隆对象2
    
    // 使用复制出的对象newobj1和newobj2
    View Code

    五、实例

         在一个图形编辑器中,每一个图形元素,如线、圆、文字等都应该支持拷贝操作,即点中图形,按下Ctrl+C,再按下Ctrl+V后就会复制一个新的图形。显然这是一种clone操作。所以在每个从Graphic派生出的图形子类都应运用Prototype模式,加上Clone操作。

  • 相关阅读:
    centos从安装到环境配置
    PHP获取上个月、下个月、本月的日期
    js判断是哪种浏览器和阻止页面加载
    jquery中attr和prop的区别
    php curl 提交 总结
    合并二维数组,并计算重复字段的平均值
    检测端口和URL状态码判断启动服务
    curl-URL语法传输工具
    HAproxy 2.1.3源码 编译问题
    HAproxy 负载均衡器
  • 原文地址:https://www.cnblogs.com/wangzhijun/p/3466765.html
Copyright © 2011-2022 走看看