C# 中的设计模式2:Prototype(学习笔记)
2008-01-16 14:40
323 查看
为什么要用原型?用原型的好处
比如我们有一个工具栏按钮,“新建”按钮,它是Button的实例,它有长度、宽度属性等,而且属性都赋了值。
现在我们要再添加一个“保存”按钮,它也是Button的实例,它也有长度、宽度属性等,不过它还没赋值,它的值和“新建”按钮的值一样。
如果我们不用原型设计模式的话,可能重新赋一遍值。如果我们用原型设计模式的话,我们可以把“新建”按钮作为“保存”按钮的原型。那样的话就不需要再给“保存”按钮赋值,它的默认的长度、宽度就和“新建”按钮一样了。
在C#中怎样用原型?
因为类的实例是引用类型,要想用原有的类中的实例的数据的话,只能用clone方法。
Clone方法分为深clone和浅clone
在C#中提供了浅clone的方法,即为MemberwiseClone()
Sample:
using System;
namespace Sky.Study
{
public class Button : ICloneable
{
public int width { get; set; }
public int height { get; set; }
public object Clone()
{
return this.MemberwiseClone();
}
}
public class Test
{
public void TestMethod()
{
Button b1 = new Button();
b1.width = 30;
b1.height = 20;
Button b2 = new Button();
b2 = (Button)b1.Clone();
}
}
}
比如我们有一个工具栏按钮,“新建”按钮,它是Button的实例,它有长度、宽度属性等,而且属性都赋了值。
现在我们要再添加一个“保存”按钮,它也是Button的实例,它也有长度、宽度属性等,不过它还没赋值,它的值和“新建”按钮的值一样。
如果我们不用原型设计模式的话,可能重新赋一遍值。如果我们用原型设计模式的话,我们可以把“新建”按钮作为“保存”按钮的原型。那样的话就不需要再给“保存”按钮赋值,它的默认的长度、宽度就和“新建”按钮一样了。
在C#中怎样用原型?
因为类的实例是引用类型,要想用原有的类中的实例的数据的话,只能用clone方法。
Clone方法分为深clone和浅clone
在C#中提供了浅clone的方法,即为MemberwiseClone()
Sample:
using System;
namespace Sky.Study
{
public class Button : ICloneable
{
public int width { get; set; }
public int height { get; set; }
public object Clone()
{
return this.MemberwiseClone();
}
}
public class Test
{
public void TestMethod()
{
Button b1 = new Button();
b1.width = 30;
b1.height = 20;
Button b2 = new Button();
b2 = (Button)b1.Clone();
}
}
}
相关文章推荐
- C#设计模式学习笔记-单例模式
- 【HeadFirst 设计模式学习笔记】18 原型(Prototype)模式拾零
- C#设计模式学习笔记-单例模式(转)
- C#面向对象设计模式纵横谈 学习笔记22 State模式(行为型模式)
- C#设计模式学习笔记-单例模式
- HeadFirst 设计模式学习笔记19--原型(Prototype)模式拾零
- C#设计模式学习笔记-单例模式
- 【设计模式学习笔记五】【创建型模式】【原型模式(Prototype)】
- C#面向对象设计模式纵横谈 学习笔记3 Abstract Factory 抽象工厂
- C#设计模式学习笔记-单例模式
- C#设计模式学习笔记-单例模式
- 设计模式学习笔记(六)——Prototype原型模式
- 设计模式学习笔记_原型模式(prototype)
- C#设计模式学习笔记-单例模式
- C#面向对象设计模式学习笔记(1) - Singleton 单件模式(创建型模式)
- C#面向对象设计模式学习笔记(5) - Prototype 原型模式(创建型模式)
- C#设计模式学习笔记-单例模式
- 步步为营 .NET 设计模式学习笔记 五、Prototype(原型模式)
- C#设计模式学习笔记-单例模式
- C#设计模式学习笔记-单例模式