模式的力量
一直以来设计模式广受关注。打开每天的博客园首页都能看到相关的blog出现,几乎每一篇文章都令人愉快,也许你会突然的发现,如果从这个角度看DesignPattern是这样的优美。
通过一定的学习,我明白了很多模式,知道了模式的一些基础性的东西:GOF的定义;如果去套用,等等。尤其是从李建忠老师的webcast中学到了模式的精髓。
经过一段的实践,我总是感觉,对模式的使用力不从心。总结了其中一个原因:实践中,单独的模式使用是少得,更多的是模式的组合使用,所以,如果不能灵活的把多个模式组合使用,想提供一些优美的解决方案,还是很难。
也不知道对不对,希望各位不吝赐教。
下文,我一个例子抛砖引玉,希望以后博客园出现更多组合模式使用的文章。
我的想法是实现一个策略模式,同时将一个个抽象工厂作为策略模式的变化算法进行封装。
Strategy
WindowStrategy
LinuxStrategy
namespace StrategyAndAbstractFactory
{
public abstract class AbstractFactory
{
abstract public Button CreateButton();
abstract public Radio CreateRadio();
}
}
{
public abstract class AbstractFactory
{
abstract public Button CreateButton();
abstract public Radio CreateRadio();
}
}
namespace StrategyAndAbstractFactory
{
public class WindowFactory:AbstractFactory
{
public override Button CreateButton()
{
return new WindowButton();
}
public override Radio CreateRadio()
{
return new WindowRadio();
}
}
}
{
public class WindowFactory:AbstractFactory
{
public override Button CreateButton()
{
return new WindowButton();
}
public override Radio CreateRadio()
{
return new WindowRadio();
}
}
}
namespace StrategyAndAbstractFactory
{
public class LinuxFactory:AbstractFactory
{
public override StrategyAndAbstractFactory.Button CreateButton()
{
return new LinuxButton();
}
public override StrategyAndAbstractFactory.Radio CreateRadio()
{
return new LinuxRadio();
}
}
}
{
public class LinuxFactory:AbstractFactory
{
public override StrategyAndAbstractFactory.Button CreateButton()
{
return new LinuxButton();
}
public override StrategyAndAbstractFactory.Radio CreateRadio()
{
return new LinuxRadio();
}
}
}
Button
例子中转变了一下对策略模式中算法的理解,使抽象工厂作为一个变化的算法,从而提供了一整套的算法变化。如果你系统中,要从window风格的按钮转变成Linux风格的,你只要简单的改变一下策略模式的算法,这里就是你选择一个新的抽象工厂。
随便想的,抛砖引玉,以期各位更多优秀大作!
代码下载
==2006-7-23
posted on 2006-07-24 21:54 flyingchen 阅读(2378) 评论(19) 编辑 收藏 举报