最近在做一个轻量级CMS供客户站点使用。
根据客户的需求,需要以静态页方式提供用户浏览的页面,同时还要保留一个本份,支持“双远程”发布,即在一台远程发布服务器上保留存根,最终页面保存在文件服务器上供用户访问。
研究了半天,发现可以用策略模式和职责链模式相结合来实现这个处理逻辑(我估且称此为策略链模式)。
以下是策略链的根接口,其他接口从这上面继承:
1
namespace strategyChain
2
}
2
处理新闻的接口:
1
namespace strategyChain
2
}
2
然后写一个抽象类来实现该接口:NewsStrategy
为了满足顾客的要求,写了三个类来继承NewsStrategy: LocalNewsStrategy,RemoteNewsStrategy,SqlNewsStrategy
1
namespace strategyChain
2
}
2
1
namespace strategyChain
2
}
2
1
namespace strategyChain.SqlClient
2
}
2
把这个写完了以后,创建一个NewsProvider类,来根据用户定义配置稿件的操作逻辑,配置完以后应用程序利用工厂方法,在运行时得到一个NewsProvider,来执行策略链。工厂方法在这里就不写了,写一个NewsProvider的实现。
写完了这个抽象类以后,再在最后一个结点处继承该抽象类:
1
namespace strategyChain.SqlClient
2
}
2
最后只需要在配置文件中指定 NewsProvider = "SqlNewsProvider"即可,真正的运行时代码将是
News news = null;
//实现news
NewsProvider provider = NewsFactory.GetNewsProvider();
provider.DoSomething(news);