设计模式学习总结原型模式(Prototype)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式学习总结原型模式(Prototype)相关的知识,希望对你有一定的参考价值。

  原型模式即通过对象拷贝的方式来实现对同类对象的生成的一种设计模式!

  浅复制:对于值类型,则直接复制该值,对于引用类型的字段则是对其引用的复制,如果原引用与现引用只要有一个的值发生变化,则都会造成两者值的变化。

    深复制:对于值类型,则直接复制该值,对于引用类型的字段则复制其引用的对象,如果有多个/级嵌套引用,则复制所有引用的对象。  

  一、示例展示:

  通过学习及总结,以下是我完成的原型模式的示例:

  1. 创建抽象原型类:HandphonePrototype

技术分享
public abstract class HandphonePrototype
{
    private string cpu;
    private string keyboard;
    private string screen;

    public HandphonePrototype(string cpu,string keyboard,string screen)
    {
        this.cpu = cpu;
        this.keyboard = keyboard;
        this.screen = screen;
    }
    
    public string CPU
    {
        get
        {
            return cpu;
        }
    }

    public string KEYBOARD
    {
        get
        {
            return keyboard;
        }
    }

    public string SCREEN
    {
        get
        {
            return screen;
        }
    }
    abstract public HandphonePrototype Clone();
}
View Code

  2. 创建具体原型类:AppleHandphonePrototype

技术分享
public class AppleHandphonePrototype : HandphonePrototype
{
    public AppleHandphonePrototype(string cpu, string keyboard, string screen) : base ( cpu,keyboard,screen ) { }
    public override HandphonePrototype Clone()
    {
        //Shallow copy
        return (HandphonePrototype)this.MemberwiseClone();
    }
}
View Code

  3. 客户端调用:

技术分享
class Program
{
    static void Main(string[] args)
    {
        AppleHandphonePrototype cp1 = new AppleHandphonePrototype("100","26","Very wounderful!");
        AppleHandphonePrototype str = (AppleHandphonePrototype)cp1.Clone();
        Console.WriteLine(str.CPU);
        Console.WriteLine(str.KEYBOARD);
        Console.WriteLine(str.SCREEN);
        Console.ReadLine();
    }
}
View Code

  以上示例实现的是一个浅拷贝,如果希望实现一个深拷贝,则需要实现ICloneable接口并编写自己的Clone()方法;

  二、原型模式设计理念:

  以被拷贝对象作为原型,通过实现抽象原型类中的clone()方法在客户端进行对象的拷贝。主要通过浅拷贝(MemberwiseClone)和深拷贝(实现ICloneable接口并编写自己的克隆方法)来实现对对象引用和引用的对象的拷贝。

  三、角色及关系:

   技术分享 

以上是关于设计模式学习总结原型模式(Prototype)的主要内容,如果未能解决你的问题,请参考以下文章

java设计模式之Prototype 原型模式(浅拷贝和深拷贝)纯干货

尚硅谷设计模式学习--- [原型模式(Prototype模式),深拷贝与浅拷贝]

设计模式之原型模式(Prototype)详解及代码示例

学习笔录——大话设计模式——原型模式

学习笔录——大话设计模式——原型模式

swift设计模式学习 - 原型模式