HeadFirst Design Pattern 读书摘记(1)--策略模式
今天开始读HeadFirst Design Pattern了,真是一本介绍设计模式的好书,刚刚翻看了3,4页我就被书中的内容吸引了。通俗易懂,深入浅出,特别适合像我这样的初学者阅读。现在我把阅读过程中自认为的经典之处贴在这里,以便我今后查阅。同时,这本的源代码是Java的,在参考了网上的一些资源以后,自己也写出了C#版本的源代码,一并贴出。
在开篇中提到了我们的设计工具箱中的工具主要包括:
1.OO基础:抽象,封装,多态和继承。
2.OO原则:封装变化;多用组合,少用继承;针对接口编程,不针对实现编程 .etc.。
3.OO模式:就是书中正要介绍的设计模式。
使用这些工具的要点是:1,知道OO基础,并不足以让你设计出良好的OO系统。2,良好的OO设计必须具备可复用、可扩展、可维护三个特性。3,模式可以让我们建造出具有良好OO设计质量的系统。4,模式被认为是经历验证的OO设计经验。5,模式不是代码,二十针对问题的通用解决方案。你可把它们应用到特定的应用中。6,大多数的模式和原则,都着眼于软件变化的主题。7,大多数的模式都允许系统局部改变对立于其它部分。8,我们常把系统会变化的部分抽出来封装。9,模式让开发人员之间有共享的语言,能够最大化沟通的价值。
第一章介绍的是策略模式:定义算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。C#的代码贴在下边:
using System;
using System.Collections.Generic;
using System.Text;
namespace 策略模式
{
/// <summary>
///鸭子抽象类
/// </summary>
public abstract class Duck
{
//面向接口编程
//为鸭子的基类添加两个行为委托类的接口,
//在以后具体实现鸭子实例的时候,指定为特定的实现
protected IFlyBehavior flyBehavior;
protected IQuackBehavior quackBehavior;
public Duck()
{
}
//所有鸭子的共同行为
public string swim()
{
return "All duck could swimming ,I'm swimming now!";
}
//所有鸭子的外观都有区别,因此都要实现这个方法
public abstract string DisPlay();
//实现接口的行为
public string PerformFly()
{
return flyBehavior.Fly();
}
public string PerformQuack()
{
return quackBehavior.Quack();
}
//动态指定鸭子的行为
public void SetFlyBehavior(IFlyBehavior fb)
{
flyBehavior = fb;
}
public void SetQuackBehavior(IQuackBehavior qb)
{
quackBehavior = qb;
}
}
/// <summary>
/// 先设置一个鸭子模板
/// </summary>
public class ModeDuck : Duck
{
public ModeDuck()
{
flyBehavior = new FlyNoWay();
quackBehavior = new CanQuack();
}
public override string DisPlay()
{
return "I'm a model duck!!";
}
}
/// <summary>
/// 红头鸭的实现
/// </summary>
public class RedHeadDuck : Duck
{
public override string DisPlay()
{
return "My head is red!!";
}
}

鸭子的飞行委托类、接口

鸭子的叫委托类、接口
}
(注:记录一下这些内容只是以后查阅起来方便,作为自己知识积累的记录。其中有很多是参考网络上的资源,不再一一写出出处,还请原作者见谅。)


浙公网安备 33010602011771号