zoukankan      html  css  js  c++  java
  • 二十三种设计模式之原型模式的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();
            }
    

      执行结果

  • 相关阅读:
    「网络流 24 题」魔术球
    「网络流 24 题」圆桌聚餐
    「网络流 24 题」最小路径覆盖
    「网络流 24 题」太空飞行计划
    「网络流 24 题」搭配飞行员
    「网络流 24 题」负载平衡
    「网络流 24 题」数字梯形
    餐巾计划问题
    让Double类型完整显示,不用科学计数法显示E
    kotlin新工程
  • 原文地址:https://www.cnblogs.com/devgis/p/6710844.html
Copyright © 2011-2022 走看看