说说几个设计模式
最近几天都在看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原则:
封装变化
多用组合,少用继承
针对接口编程,不针对具体实现编程