说说几个设计模式

最近几天都在看Head.First设计模式一书,觉得这本书写的很好,选序渐进的。此书第一张讲的设计模式是策略模式--定义算法族,分别封装起来,让它们之间可以互相替换,让算法的变化独立于使用算法的客户该模式是为了让代码更易被扩展,而且扩展带来的代价更低。应该算符合开放关闭(对扩展开放,对修改关闭)原则吧。其思想主要是把不变的与变化的分开,然后利用某些手段进行委托达到代码的最大复用,或者说达到最大的封装效果。

1.如要设计一个地球村游戏。首先必须建立一段能实现实例化地球村的各个国家人的代码。分析一下:各个人种中什么是不变的,什么是会变的?很显然,人都有一双手,一双腿,一个鼻子,一双眼睛,然而各个国家的服装,吃饭的习惯等是不一样的。故应该把服装搭配,以及吃饭的习惯给分离出来,弄成一个接口。

public interface dressable

{

public void Dressed();//各国人的穿着由实现该接口的类进行定义

}

public ChinaDress:dressable//ChinaDress实现接口dressable

{

public void Dressed()

{

//输出穿旗袍

}

}

接下来,我们应该考虑如何把地球人这个大类给封装起来,首先该类应该是一个抽象类或是接口。

public abstract class Human

{

string hands,legs,noses;

dressable dress;//通过接口巧妙达到了通用效果

public void Dressed()

{

 dress.Dressed();      //这里我们做得比较简单一点

}

}

然后我们做出一个具体的国家中国人类,该类继承地球人类。

public class Chinese : Human

{

public Chinese()

{

 dress=new ChinaDress;//初始化中国人类的穿着

}

}

这样设计出来的程序把变与不变给分开了,而又巧妙的运用接口的上转型特征实现整个类的封装,这就是策略模式的思想。

几条OO原则:

封装变化

多用组合,少用继承

针对接口编程,不针对具体实现编程

posted @ 2011-02-24 16:10  efface  阅读(217)  评论(0编辑  收藏  举报