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!!";
        }

    }



    
鸭子的飞行委托类、接口


    
鸭子的叫委托类、接口
}

posted @ 2008-02-29 13:07  collum  阅读(302)  评论(1)    收藏  举报