二十三种设计模式之原型模式的C#实现

原型模式就是通过拷贝快速创建一个新的对象

本例UML如图

ColorBase

[Serializable]
    public abstract class ColorBase
    {
        public int R = 0;
        public int G = 0;
        public int B = 0;
        public virtual ColorBase Clone()
        {
            return this;
        }

        public virtual void ShowMe()
        {
            Console.WriteLine(string.Format(" r={0} g={1} b={2}", R, G, B));
        }
    }

  RGBAColor

[Serializable]
    public class RGBAColor : ColorBase
    {
        public override ColorBase Clone()
        {
            ColorBase color;
            MemoryStream memoryStream = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(memoryStream, this);
            memoryStream.Position = 0;
            color = (RGBAColor)formatter.Deserialize(memoryStream);
            return color;
        }
    }

  ColorManager

 public class ColorManager
    {
        RGBAColor rgbColor = new RGBAColor();

        public ColorBase ColorBase
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        public ColorBase GetNewColor()
        {
            return rgbColor.Clone();
        }
    }

  Main方法中进行测试

static void Main(string[] args)
        {
            ColorManager colorManager = new ColorManager();
            ColorBase red = colorManager.GetNewColor();
            red.R = 255;

            ColorBase green = colorManager.GetNewColor();
            green.G = 255;

            ColorBase blue = colorManager.GetNewColor();
            blue.B = 255;

            red.ShowMe();
            green.ShowMe();
            blue.ShowMe();

            Console.Read();
        }

  执行结果

时间: 2024-12-15 02:18:15

二十三种设计模式之原型模式的C#实现的相关文章

二十三种设计模式[12] - 代理模式(Proxy Pattern)

前言 代理模式,属于对象结构型模式.在<设计模式 - 可复用的面向对象软件>一书中将之描述为" 为其它对象提供一种代理以控制对这个对象的访问 ". 在代理模式中,通常使用一个类来代表另一个类的功能,并由这个代理对象去控制原对象的引用. 结构 Subjuet(公共接口):代理类和被代理类的公共接口,保证任何使用目标的地方都可以被代理类替换: RealSubject(被代理类):代理类所代表的目标类: Proxy(代理类):包含对目标类的引用,目标类的封装: 场景 在日常生活中

二十三种设计模式[20] - 状态模式(State Pattern)

前言 状态模式,对象行为型模式的一种.在<设计模式 - 可复用的面向对象软件>一书中将之描述为" 允许一个对象在其内部状态改变时改变它的行为,使对象看起来似乎修改了它的类 ". 场景 我们都坐过火车,火车可以简单的分为" 开门 "," 关门 "," 运行 "," 停止 "四个状态.火车在这四个状态下分别可以做不同的事情.比如只有在关门时才行运行.只有在停止时才能开门. 我们在开发类似的业务时,往

二十三种设计模式[21] - 策略模式(Strategy Pattern)

前言 策略模式,对象行为型模式的一种.在<设计模式 - 可复用的面向对象软件>一书中将之描述为" 定义一些列的算法,把它们一个个封装起来,并且使它们可相互替换.使得算法可以独立于使用它的客户而变化 ". 也就是说通过策略模式,我们能够将算法与其调用者分离成相对独立的个体,降低维护成本,使代码更加优雅. 场景 就拿数据的搜索来说,可以简单的分为模糊搜索和精确搜索.在开发这个功能时,可能会写出如下代码. public List<string> Search(stri

二十三种设计模式[23] - 访问者模式(Visitor Pattern)

前言 访问者模式,是一种将数据的结构与其操作分离的类行为型模式.它能够帮助我们解决数据结构稳定但数据操作多变的问题,使我们可以很容易的增加或修改数据的操作. 在<设计模式 - 可复用的面向对象软件>一书中将之描述为" 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作 ". 结构 Visitor(访问者接口):定义了每种元素的访问行为,一般情况下访问行为的个数与元素种类的个数一致: ConcretVisitor(具体访问

二十三种设计模式——工厂模式

二十三种设计模式--工厂模式 简单工厂模式 简单工厂模式又称静态工厂方法(StaticFactory Method)模式,不属于23种模式之一. 简单工厂模式是工厂模式最简单使用的模式. 类图: 程序: #include <iostream> #include<string> using namespace std; class NationalFlag//父类 { public: NationalFlag(){} ~NationalFlag(){} virtual void di

二十四种设计模式:原型模式(Prototype Pattern)

原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 示例有一个Message实体类,现在要克隆它. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Prototype { /// <summary> /// Message实体类 /// </summary> publi

c# 24种设计模式5原型模式(Prototype)

前言 原型模式其实C# Object中已经提供了一个Clone( )方法,平时很少用到,最近读Retrofit源码时候看到有这种使用方式. 定义 原型模式就是在系统clone()标记的基础上,对Clone()进行复写,不同的操作可以产生两种拷贝模式. 例子一场景 是个java的, 只是介绍使用的场景 UML类图 今天我们来讲原型模式,这个模式的简单程度是仅次于单例模式和迭代器模式,非常简单,但是要使 用好这个模式还有很多注意事项.我们通过一个例子来解释一下什么是原型模式. 现在电子账单越来越流行

二十三种设计模式及其python实现

本文源码寄方于github:https://github.com/w392807287/Design_pattern_of_python 参考文献: <大话设计模式>——吴强 <Python设计模式>——pythontip.com <23种设计模式>——http://www.cnblogs.com/beijiguangyong/ 设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用

23种设计模式之原型模式(Prototype)

在系统开发过程中,有时候有些对象需要被频繁创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后通过复制这个原型对象的办法,创建出更多同类型的对象.原型模式是一种对象创建型模式,用原型实例制定创建对象的种类,并且通过复制这些原型创建新的对象.原型模式又可分为两种:浅克隆和深克隆.浅克隆仅仅复制所考虑的对象,而不复制它所引用的对象,也就是其中的成员对象并不复制:深克隆除了对象本身被复制外,对象包含的引用也被复制,即成员对象也被复制. 优点: 1)可以在运行时添加或删除产品. 2)通过改