创建型设计模式——原型模式

用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

适用于

①当一个系统应该独立于它的产品创建、构成和表示时。

②当要实例化的类是在运行时刻指定时,例如,通过动态加载。

③为了避免创建一个与产品类层次平行的工厂类层次时。

④当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些。

类图如下

浅拷贝实现如下

 1     internal class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             ConcretePrototype concretePrototype = new ConcretePrototype();
 6 
 7             ConcretePrototype concretePrototype1 = (ConcretePrototype)concretePrototype.Clone();
 8 
 9             concretePrototype.Attr = "属性111";
10             concretePrototype1.Attr = "属性222";
11 
12             Console.WriteLine(concretePrototype.ToString());
13             Console.WriteLine(concretePrototype1.ToString());
14 
15             Console.WriteLine($"concretePrototype==concretePrototype1 ?? {concretePrototype == concretePrototype1}");
16         }
17     }
1     /// <summary>
2     /// 声明一个克隆接口,提供克隆方法,由具体子类实现
3     /// </summary>
4     internal interface IPrototype
5     {
6         IPrototype Clone();
7     }
 1     /// <summary>
 2     /// 具体克隆类,实现clone方法,返回克隆对象
 3     /// </summary>
 4     internal class ConcretePrototype : IPrototype
 5     {
 6         public string Attr { get; set; }
 7         public ConcretePrototype()
 8         {
 9             Console.WriteLine("创建实例,调用构造函数");
10         }
11 
12         public IPrototype Clone()
13         {
14             //object提供的克隆对象方法,没有调用构造函数
15             return (IPrototype)MemberwiseClone();
16         }
17 
18         public override string ToString()
19         {
20             return $"Attr={Attr}";
21         }
22     }
View Code

 

posted @ 2025-05-11 17:16  是铭不是明  阅读(15)  评论(0)    收藏  举报