态度决定高度、企图决定版图、格局决定结局

导航

模式的力量

 

       一直以来设计模式广受关注。打开每天的博客园首页都能看到相关的blog出现,几乎每一篇文章都令人愉快,也许你会突然的发现,如果从这个角度看DesignPattern是这样的优美。
       通过一定的学习,我明白了很多模式,知道了模式的一些基础性的东西:GOF的定义;如果去套用,等等。尤其是从李建忠老师的webcast中学到了模式的精髓。
      经过一段的实践,我总是感觉,对模式的使用力不从心。总结了其中一个原因:实践中,单独的模式使用是少得,更多的是模式的组合使用,所以,如果不能灵活的把多个模式组合使用,想提供一些优美的解决方案,还是很难。
也不知道对不对,希望各位不吝赐教。
 下文,我一个例子抛砖引玉,希望以后博客园出现更多组合模式使用的文章。




我的想法是实现一个策略模式,同时将一个个抽象工厂作为策略模式的变化算法进行封装。

Strategy

WindowStrategy

LinuxStrategy

namespace StrategyAndAbstractFactory
{
    
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();
        }

    }

}


namespace StrategyAndAbstractFactory
{
    
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编辑  收藏  举报