第5章 原型模式(Protype Pattern)

时间:2023-01-14 20:07:35

原文 第5章 原型模式(Protype Pattern)

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

原型图:

第5章 原型模式(Protype Pattern)

原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype

原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代

原型模式示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 /// <summary>
    /// 原型类
    /// </summary>
    abstract class Prototype
    {
        private string id;
        public Prototype(string id)
        {
            this.id = id;
        }
        public string ID
        {
            get return id; }
        }
        /// <summary>
        /// 克隆方法
        /// </summary>
        /// <returns></returns>
        public abstract Prototype Clone();
    }
    /// <summary>
    /// 具体的原型类
    /// </summary>
    class ConcretePrototype : Prototype
    {
        public ConcretePrototype(string id):base(id)
        {}
        public override Prototype Clone()
        {
            //克隆当前对象,浅复制
            return (Prototype)this.MemberwiseClone();
        }
    }
     
    //客户端调用
    class Program
    {
        static void Main(string[] args)
        {
 
            ConcretePrototype p1 = new ConcretePrototype("I");
            ConcretePrototype c1 = (ConcretePrototype)p1.Clone();//克隆ConcretePrototype的对象p1就能得到新的实例c1.  
            Console.WriteLine("Cloned:{0}", c1.ID);
 
            Console.Read();  
        }
    }

代码比较的简单,只要还是为了更好的讲解核心的复制功能部分,原型模式还可以演变成很多种变化,这里就不在详细举例。

设计模式系列文章入口:http://www.diyibk.com/post/39.html

第5章 原型模式(Protype Pattern)的更多相关文章

  1. 设计模式01 创建型模式 - 原型模式&lpar;Protype Pattern&rpar;

    参考 1. 设计模式:原型模式 | 博客园 2. Java clone深拷贝.浅拷贝 | CSDN 3. Cloneable接口和Object的clone()方法 | 博客园 原型模式(Prototy ...

  2. Net设计模式实例之原型模式&lpar; Prototype Pattern&rpar;

    一.原型模式简介(Brief Introduction) 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. Specify the kin ...

  3. 二十四种设计模式:原型模式&lpar;Prototype Pattern&rpar;

    原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象.示例有一个Message实体类,现在要克隆它. MessageModel usin ...

  4. 乐在其中设计模式&lpar;C&num;&rpar; - 原型模式&lpar;Prototype Pattern&rpar;

    原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...

  5. 【设计模式】原型模式 Pototype Pattern

    前面讲了创建一个对象实例的方法单例模式Singleton Pattern, 创造多个产品的工厂模式(简单工厂模式 Simple Factory Pattern, 工厂方法模式 FactoryMothe ...

  6. 设计模式之第9章-原型模式&lpar;Java实现&rpar;

    设计模式之第9章-原型模式(Java实现) “快到春节了,终于快放假了,天天上班好累的说.”“确实啊,最近加班比较严重,项目快到交付了啊.”“话说一到过节,就收到铺天盖地的短信轰炸,你说发短信就发吧, ...

  7. 设计模式系列之原型模式&lpar;Prototype Pattern&rpar;——对象的克隆

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  8. 2&period;6 《硬啃设计模式》第8章 复制不是很难 - 原型模式&lpar;Prototype Pattern&rpar;

    案例: 某即时战略游戏,你训练出来各种很强的战士. 为了增加游戏的可玩性,增加了一种复制魔法.实施该魔法,可以复制任意的战士. 你会怎样考虑这个设计? 在继续阅读之前,请先认真思考并写出你的设计,这样 ...

  9. 六个创建模式之原型模式&lpar;Prototype Pattern&rpar;

    定义: 使用原型实例指定创建对象的种类,并通过拷贝这个原型的属性创建新的对象. 结构图: Prototype:抽象原型类,声明克隆方法的接口,并是所有原型类的公共父类.在Java中,Object类为该 ...

随机推荐

  1. Javascript理解this对象

    this是函数运行时自动生成的一个内部对象,只能在函数内部使用,但总指向调用它的对象. 通过以下几个例子加深对this的理解. (1)作为函数调用 var name = 'Jenny'; functi ...

  2. FP 某段SQL语句执行时间超过1个小时,并报错:ORA-01652&colon; 无法通过 128 &lpar;在表空间 TEMPSTG 中&rpar; 扩展

    一.出现如下两个错误:1.某一段SQL语句执行时间超过1个小时:2.一个小时后,提示如下错误:ORA-01652: 无法通过 128 (在表空间 TEMPSTG 中) 扩展 temp 段ORA-065 ...

  3. UVa10603 Fill

    解题思路:这是神奇的一题,一定要好好体会.见代码: #include<cstdio> #include<cstring> #include<algorithm> # ...

  4. memcached复制-repcached

    1.前言 由于memcached把数据都放到内存里,因此性能是极高的,正因为如此,不可避免会造成数据丢失,repcached就派上用场了,它可以实现memcached的主从复制 2.安装repcach ...

  5. CSS选取第n个标签元素

    最近做一个项目,碰到这样的需求,需要选取某个元素的倒数第几个标签元素,想让他显示不同的样式 1.first-child first-child表示选择列表中的第一个标签.例如:li:first-chi ...

  6. Javascript高级编程学习笔记(98)—— WebGL&lpar;4&rpar; WebGL上下文&lpar;2&rpar;

    错误 Javascript与WebGL之间的一个最大区别在于,WebGL的操作一般不会抛出错误 如果希望获取WebGL的错误信息,那么就需要手动调用  gl.getError() 方法 该方法会返回以 ...

  7. mysql数据库数据的 备份以及还原

    数据库备份的3种方式: 例如:mysqldump -uzx_root -p test>/root/test1.sql

  8. &lbrack;Luogu 3401&rsqb; 洛谷树

    Description 有一棵树,要求支持 查询两点间简单路径的所有子链的异或和的和 修改某条边的权值 Solution 这种树上异或问题首先应该想到对于每个点存下一个前缀异或和表示这个点到根节点路径 ...

  9. 【BZOJ 4832 】 4832&colon; &lbrack;Lydsy2017年4月月赛&rsqb;抵制克苏恩 (期望DP)

    4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 275  Solved: 87 Descripti ...

  10. 【ML】概率图模型

    http://wenku.baidu.com/link?url=-Fa32JAnvwS8fyWgdPjYLNGvmor42lWCT6N7TehNQAnx4ZVmJtC0L0SgnaLtEFMB9Gzw ...