模板方法:这个模式挺简单的,基本上就是利用继承的特点,把子类中相同的部分放到父类中,再由父类提供一个方法,由子类去实现这个方法。当遇到子类有大量相同部分时,可以考虑该方法。
这是父类和子类的代码:
abstract class AbstractClass
{
protected abstract void PrimitiveOperation1(); //由子类去实现的
protected abstract void PrimitiveOperation2();
public void TemplateMethod() //子类实现的方法,统统放到这个方法中。
{
PrimitiveOperation1();
PrimitiveOperation2();
Console.WriteLine("");
}
}
class ConcreteClassA:AbstractClass
{
protected override void PrimitiveOperation1()
{
Console.WriteLine("具体类A方法1实现");
}
protected override void PrimitiveOperation2()
{
Console.WriteLine("具体类A方法2实现");
}
}
class ConcreteClassB:AbstractClass
{
protected override void PrimitiveOperation1()
{
Console.WriteLine("具体类B方法1实现");
}
protected override void PrimitiveOperation2()
{
Console.WriteLine("具体类B方法2实现");
}
}
static void Main(string [] args)
{
AbstractClass c;
c=new ConcreteClassA();
c.TemplateMethod();
c=new ConcreteClassB();
c.TemplateMethod();
Console.Read();
}
原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。而拷贝在C#中使通过MeberwiseClone 方法来实现的。它只能对值类型进行拷贝。引用类型的拷贝就需要我们自己去实现了。
看大话里的代码:
private Resume (WorkExperience work) //只要生成实例,就初始化。//采用Clone方法,不仅实例化了对象,
//而且连workeperience对象的结构一块复制了,值类型直接复制数据,引用类型也复制引用了
{
this.work = (WorkExperience)work.Clone();
}
我觉得这段代码用的十分巧妙,不仅使引用类型复制了,而且连带着引用类型中的值类型也复制了。由此我们可以想到,无论哪种设计模式都可以进行改变的,遇到什么问题,解决什么问题好了。
结语:设计模式不是一种模式,而是编程的法则,正式通过这些模式把面向对象里的法则用的熟练再熟练。