Net设计模式实例之原型模式( Prototype Pattern)(1)

简介:

一、原型模式简介(Brief Introduction

原型模式 (Prototype Pattern) :用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype
浅复制与深复制区别:
浅复制,被复制的所有变量都还有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制,把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
Net 命名空间 System 提供了一个 IConeable 接口,此接口只有一个方法 Clone() ,只需要实现这个接口就可以实现原型模式( Prototype Pattern )了。

二、解决的问题(What To Solve

当一个对象生成不是通过 New 而是通过复制旧对象的时候,可以考虑使用原型模式。

三、原型模式分析(Analysis

1、原型模式结构

 
Prototype :原型类  Clone() 方法 : 克隆自身的接口。
ConcretePrototypeA ConcretePrototypeA :原型类的具体实现。克隆一个自身的操作。

2、代码

1 、原型抽象类 Prototype
///   <summary>
///   抽象原型模式类
///   </summary>
public  abstract class Prototype
{
    private string  _id;
    public  Prototype(string  id)
     {
        this .Id = id;
     }
    public string  Id
     {
        get  { return  _id; }
        set  { _id = value ; }
     }
 
    public abstract Prototype  Clone();
}
 
2 、具体实现类 ConcretePrototypeA ConcretePrototypeB
public  class ConcretePrototypeA  : Prototype
{
    public  ConcretePrototypeA(string  id)
         base (id)
     { }
    /// <summary>
    /// Returns a sha ll ow copy  浅拷贝
    /// </summary>
    /// <returns>a sha ll ow copy</returns>
    public override Prototype  Clone()
     {
        return  (Prototype )this .MemberwiseClone();
     }
}
 
public  class ConcretePrototypeB :Prototype
{
    public  ConcretePrototypeB(string  id)
         base (id)
     { }
    /// <summary>
    /// a sha ll ow copy
    /// </summary>
    /// <returns> 浅拷贝 </returns>
    public override Prototype  Clone()
     {
        return  (Prototype )this .MemberwiseClone();
     }
}
 
2 、客户端代码
static  void  Main (string [] args)
{
    Prototype  pA = new ConcretePrototypeA ("A" );
    Prototype  cA = pA.Clone() as ConcretePrototypeA  ;
    Console .WriteLine("Cloned:" +cA.Id);
 
    ConcretePrototypeB  pB = new ConcretePrototypeB ("B" );
    ConcretePrototypeB  cB = (ConcretePrototypeB )pB.Clone();
    Console .WriteLine("Cloned:" +cB.Id);
    Console .ReadKey();
}

3、实例运行结果










本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/263880,如需转载请自行联系原作者

目录
相关文章
|
设计模式 安全 Java
面向对象编程的精髓:Java设计模式 - 原型模式(Prototype)完全参考手册
【4月更文挑战第7天】原型模式是OOP中的创建型设计模式,用于通过复制现有实例创建新实例,尤其适用于创建成本高或依赖其他对象的情况。它包括Prototype接口、ConcretePrototype实现和Client客户端角色。优点是性能优化、避免子类化和动态增加产品族。实现包括定义原型接口、实现具体原型和客户端调用克隆方法。最佳实践涉及确保克隆正确性、选择深拷贝或浅拷贝及考虑线程安全。但需注意克隆方法管理、性能开销和循环引用等问题。在Java中,实现Cloneable接口和覆盖clone方法可实现原型模式。
226 4
|
9月前
|
设计模式 JavaScript Java
【设计模式】【创建型模式】原型模式(Prototype)
一、入门 什么是原型模式? 原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化类。 原型模式的核心是克隆(Clone),即通过复制现有
264 15
|
11月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
126 1
|
设计模式
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
517 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
308 7