日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

设计模式系列 - 原型模式

發布時間:2024/7/19 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式系列 - 原型模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所謂原型模式是指為創建重復對象提供一種新的可能。

介紹

當面對系統資源緊缺的情況下,如果我們在重新創建一個新的完全一樣的對象從某種意義上來講是資源的浪費,因為在新對象的創建過程中,是會有系統資源的消耗,而為了盡可能的節省系統資源,我們有必要尋找一種新的方式來創建重復對象。

類圖描述

由于Shape 抽象類繼承了 ICloneable 接口,所以通過上圖我們可以發現,所有具體的類型都繼承 Shape 抽象類,并實現 Clone() 方法即可。

代碼實現

1、定義具有抽象基類

public abstract class Shape : ICloneable {private string id;protected string type;public abstract void Draw();public string GetId() => id;public string GetType() => type;public void SetId(string id) => this.id = id;public new object MemberwiseClone() => base.MemberwiseClone();public abstract object Clone(); }

2、定義具體類型

public class Circle:Shape {public Circle() => type = "Circle";public override void Draw(){Console.WriteLine("I am a Circle");}public override object Clone(){Circle obj = new Circle();obj.type = type;obj.SetId(this.GetId());return obj;} }public class Rectangle:Shape {public Rectangle() => type = "Rectangle";public override void Draw(){Console.WriteLine("I am a Rectangle");}public override object Clone(){Rectangle obj = new Rectangle();obj.type = type;obj.SetId(this.GetId());return obj;} }public class Square:Shape {public Square() => type = "Square";public override void Draw(){Console.WriteLine("I am a Square");}public override object Clone(){Square obj = new Square();obj.type = type;obj.SetId(this.GetId());return obj;} }

3、創建種子數據

public class ShapeCache {private static HashSet<Shape> shapeMap = new HashSet<Shape>();public static Shape GetShape(string shapeId){var cachedShape = shapeMap.FirstOrDefault(p => p.GetId() == shapeId);return (Shape) cachedShape?.Clone();}public static void LoadCache(){Circle circle = new Circle();circle.SetId("1");shapeMap.Add(circle);Square square = new Square();square.SetId("2");shapeMap.Add(square);Rectangle rectangle = new Rectangle();rectangle.SetId("3");shapeMap.Add(rectangle);} }

4、上層調用

class Program {static void Main(string[] args){ShapeCache.LoadCache();Shape clonedShape1 = (Shape) ShapeCache.GetShape("1");Console.WriteLine(clonedShape1.GetType());clonedShape1.Draw();Shape clonedShape2 = (Shape)ShapeCache.GetShape("2");Console.WriteLine(clonedShape2.GetType());clonedShape2.Draw();Shape clonedShape3 = (Shape)ShapeCache.GetShape("3");Console.WriteLine(clonedShape3.GetType());clonedShape3.Draw();Console.ReadKey();} }

總結

在 C# 中實現原型模式的關鍵是需要定義一個繼承 ICloneable 接口的抽象類,并在子類中重寫相應的 Clone() 方法即可。

轉載于:https://www.cnblogs.com/hippieZhou/p/9940504.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的设计模式系列 - 原型模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。