使用设计模式的一个重要目的是降低代码之间的耦合性,通俗一点说,使代码之间少一些
牵连关系,将变动局部化,而不是牵一发而动全身!同时,使代码便于扩展。
当然,即使不用设计模式,也可以实现我们要的基本功能,但设计出来程序不具有良好的
结构,如果一旦需求变化,需要改动,则会带来很大的麻烦。
具体到Strategy模式,它把算法一个个封装成单独的类,并且使它们可以互相替换,使
算法独立于使用它的客户。这样如果需要增加新的算法或改变现有的算法时,只需要做
局部变动,不会牵连程序的主体结构。
策略实际上是一种设计Class的方法,将某种行为正交分解,形成不同的策略。比方说你要生成一个对象,就可以new一个对象或者clone一个对象,这就是策略,用策略模式可以设计出简单,易维护的Class,便于重用。
策略模式强调的是做同一件事情的不同方法,这些方法不能重复,也就是正交
多态只不过是一种语言机智,有的不支持多态的语言一样也要实现策略
策略处于设计层次,多态处于语言的层次
使用策略模式可以处理不稳定的经常变化的需求,对于那些需要经常变化的内容,可以把这部分限制在策略里面,以避免对系统进行到处修改。。
ACE里面用了大量的策略模式
简单工厂模式和策略模式区别
前一个解决的问题是 对象的创建
后一个封装一系列的算法 并使他们可以替换。前一个是创建模式,后一个是行为模式。
策略模式:定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
简单工厂:将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。
实际整个Strategy的核心部分就是抽象类的使用,使用Strategy模式可以在用户需要变化时,修改量很少,而且快速。
Strategy和Factory有一定的类似,Strategy相对简单轻易理解:
Strategy适合下列场合:
1.以不同的格式保存文件;
2.以不同的算法压缩文件;
3.以不同的算法截获图象;
4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。
简单工厂严格意义上不是一种设计模式,只能是一种良好的编程习惯。
状态模式指一个对象在不同的环境下呈现不同的行为,策略模式说用多个类实现同一功能。