怎么查网站空间新媒体seo指的是什么
组件协作模式
现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚绑定,来实现框架与应用程序之间的松耦合,是二者协作时常用的模式
典型模式:
- 模板方法
- 策略模式
- 观察者模式
动机
在软件的构造的过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变的异常复杂,而且有时候支持不经常使用的算法也是一种性能负担
模板定义
定义一系列算法,把他们一个个封装起来,并且使他们可以互相替换(变化),该模式使得算法可独立于使用他的客户端程序(稳定),而变化(扩展,子类化)
代码
遇到下面的情况,使用策略模式
enum TaxBase {CN_Tax,US_Tax,DE_Tax,FR_Tax //更改
};class SalesOrder{TaxBase tax;
public:double CalculateTax(){//...if (tax == CN_Tax){//CN***********}else if (tax == US_Tax){//US***********}else if (tax == DE_Tax){//DE***********}else if (tax == FR_Tax){ //更改//...}//....}};
//当我们发现代码段出现大量的if else 时候其实就是一个信号
//我们其实也可也发现我们如果大量的使用了if else 我们就违背了开放封闭性原则,这样肯定是不对的
策略模式示范
class TaxStrategy{
public:virtual double Calculate(const Context& context)=0;virtual ~TaxStrategy(){}
};class CNTax : public TaxStrategy{
public:virtual double Calculate(const Context& context){//***********}
};class USTax : public TaxStrategy{
public:virtual double Calculate(const Context& context){//***********}
};class DETax : public TaxStrategy{
public:virtual double Calculate(const Context& context){//***********}
};//扩展
//*********************************
class FRTax : public TaxStrategy{
public:virtual double Calculate(const Context& context){//.........}
};class SalesOrder{
private:TaxStrategy* strategy;public:SalesOrder(StrategyFactory* strategyFactory){this->strategy = strategyFactory->NewStrategy();}~SalesOrder(){delete this->strategy;}public double CalculateTax(){//...Context context();double val = strategy->Calculate(context); //多态调用//...}};