C#设计模式之原型(ProtoType)
2004-06-14 13:42
761 查看
1. 为什么要用原型?用原型的好处
比如我们有一个工具栏按钮,新建按钮,它是ToolbarButton的实例,它有长度、宽度属性等,而且属性都赋了值。
现在我们要再添加一个保存按钮,它也是ToolbarButton的实例,它也有长度、宽度属性等,不过它还没赋值,它的值和新建按钮的值一样。
如果我们不用原型设计模式的话,可能重新赋一遍值。如果我们用原型设计模式的话,我们可以把新建按钮作为保存按钮的原型。那样的话就不需要再给保存按钮赋值,它的默认的长度、宽度就和新建按钮一样了。
2. 在C#中怎样用原型?
因为类的实例是引用类型,要想用原有的类中的实例的数据的话,只能用clone方法。
Clone方法分为深clone和浅clone
在C#中提供了浅clone的方法,即为MemberwiseClone()
C#浅Clone的例子:
using System;
namespace DesignPattern
{
public class ToolbarButton : ICloneable //实现Clone接口
{
private int _Width;
private int _Height;
public ToolbarButton()
{
}
public int Width
{
get
{
return _Width;
}
set
{
_Width=value;
}
}
public int Height
{
get
{
return _Height;
}
set
{
_Height=value;
}
}
public object Clone()
{
return this.MemberwiseClone(); //返回浅clone方法¨
}
}
public class Test
{
public void TestMethod()
{
ToolbarButton mtb_NewButton=new ToolbarButton();
mtb_NewButton.Width=60;
mtb_NewButton.Height=30;
ToolbarButton mtb_SaveButton=new ToolbarButton();
mtb_SaveButton=(ToolbarButton)mtb_NewButton.Clone();
//这时mtb_SaveButton就有Width和Height的值了
}
}
}
比如我们有一个工具栏按钮,新建按钮,它是ToolbarButton的实例,它有长度、宽度属性等,而且属性都赋了值。
现在我们要再添加一个保存按钮,它也是ToolbarButton的实例,它也有长度、宽度属性等,不过它还没赋值,它的值和新建按钮的值一样。
如果我们不用原型设计模式的话,可能重新赋一遍值。如果我们用原型设计模式的话,我们可以把新建按钮作为保存按钮的原型。那样的话就不需要再给保存按钮赋值,它的默认的长度、宽度就和新建按钮一样了。
2. 在C#中怎样用原型?
因为类的实例是引用类型,要想用原有的类中的实例的数据的话,只能用clone方法。
Clone方法分为深clone和浅clone
在C#中提供了浅clone的方法,即为MemberwiseClone()
C#浅Clone的例子:
using System;
namespace DesignPattern
{
public class ToolbarButton : ICloneable //实现Clone接口
{
private int _Width;
private int _Height;
public ToolbarButton()
{
}
public int Width
{
get
{
return _Width;
}
set
{
_Width=value;
}
}
public int Height
{
get
{
return _Height;
}
set
{
_Height=value;
}
}
public object Clone()
{
return this.MemberwiseClone(); //返回浅clone方法¨
}
}
public class Test
{
public void TestMethod()
{
ToolbarButton mtb_NewButton=new ToolbarButton();
mtb_NewButton.Width=60;
mtb_NewButton.Height=30;
ToolbarButton mtb_SaveButton=new ToolbarButton();
mtb_SaveButton=(ToolbarButton)mtb_NewButton.Clone();
//这时mtb_SaveButton就有Width和Height的值了
}
}
}
相关文章推荐
- 《模式——工程化实现及扩展》(设计模式C# 版)《原型模式 Prototype》——“自我检验"
- 《模式——工程化实现及扩展》(设计模式C# 版)《原型模式 Prototype》——“自我检验" 参考答案
- C#设计模式之原型(ProtoType)
- C#设计模式之原型(ProtoType)
- C#设计模式之原型(ProtoType)
- C#面向对象设计模式纵横谈(6):Prototype 原型(创建型模式)
- [导入]C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式).zip(9.56 MB)
- C# 设计模式-原型(Prototype)
- C#设计模式之六原型模式(Prototype)【创建型】
- C#设计模式——原型模式(Prototype Pattern)
- C#设计模式(6)——原型模式(Prototype Pattern)
- C#设计模式:原型模式(Prototype)及深拷贝、浅拷贝
- C#设计模式之原型(ProtoType)
- Java设计模式:Prototype(原型)
- 设计模式 -- 原型模式Prototype
- 设计模式--原型模式(ProtoType)
- 设计模式(四)原型模式Prototype(创建型)
- 23种设计模式-Prototype(原型)设计模式
- PHP设计模式:创建型之原型模式(Prototype)
- 设计模式读书笔记:Prototype(原型)