.NET 设计模式—原型模式(Prototype Pattern)

简介

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,当每次都新创建一个对象的代价比较大时,可以采用这种模式,它用于创建当前对象的克隆。

优点

  • 提高性能;
  • 向客户隐藏了创建新实例的复杂性;
  • 逃避构造函数的约束;

缺点

  • 每个类必须配备一个克隆方法
  • 配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。

使用场景

  • 资源优化场景:类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。
  • 性能和安全要求的场景:通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。
  • 一个对象多个修改者的场景:一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。

实现

cs 复制代码
/// <summary>
/// 原型模式
/// </summary>
public class Prototype
{
    /// <summary>
    /// 可以把需要处理的逻辑放在构造函数中
    /// </summary>
    private Prototype()
    {

    }

    /// <summary>
    /// 静态字段也是由CLR保障的,在程序第一次使用该类型之前,完成初始化,且只初始化一次
    /// </summary>
    private static Prototype _instance = new Prototype();

    /// <summary>
    /// 每次都返回_instance的克隆对象
    /// 内存拷贝,效率很高
    /// </summary>
    /// <returns></returns>
    public static Prototype GetInstance()
    {
        return (Prototype)_instance.MemberwiseClone();
    }
}

总结

Singleton模式解决的是实体对象个数的问题。除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。

而Prototype则是通过原型(一个特殊的工厂类)来克隆"易变对象"。(其实原型就是一个特殊的单例)。

相关推荐
zzb15807 小时前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
wuqingshun3141597 小时前
如何停止一个正在退出的线程
java·开发语言·jvm
Barkamin8 小时前
队列的实现(Java)
java·开发语言
骇客野人9 小时前
自己手搓磁盘清理工具(JAVA版)
java·开发语言
J2虾虾9 小时前
在SpringBoot中使用Druid
java·spring boot·后端·druid
清风徐来QCQ9 小时前
Java笔试总结一
java·开发语言
10Eugene9 小时前
C++/Qt自制八股文
java·开发语言·c++
程序员小假9 小时前
为什么要有 time _wait 状态,服务端这个状态过多是什么原因?
java·后端
蜜獾云10 小时前
设计模式之命令模式:给其他模块下达命令
设计模式·命令模式
yuweiade10 小时前
【Spring】Spring MVC案例
java·spring·mvc