logo资料库

嵌入式C语言精华文章集锦.pdf

第1页 / 共64页
第2页 / 共64页
第3页 / 共64页
第4页 / 共64页
第5页 / 共64页
第6页 / 共64页
第7页 / 共64页
第8页 / 共64页
资料共64页,剩余部分请下载后查看
目录
(一)简单工厂模式.......................................................................................................................2  (二)策略模式...............................................................................................................................4  策略与工厂结合.......................................................................................................................6  单一职责原则...........................................................................................................................6  开放――封闭原则...................................................................................................................6  里氏代换原则...........................................................................................................................7  依赖倒转原则...........................................................................................................................7  (三)装饰模式...............................................................................................................................7  (四)代理模式...............................................................................................................................9  (五)工厂方法模式.....................................................................................................................11  (六)原型模式.............................................................................................................................13  (七)模板方法模式.....................................................................................................................15  迪米特法则 ............................................................................................................................16  (八)外观模式.............................................................................................................................16  (九)建造者模式(生成器模式).............................................................................................19  (十)观察者模式.........................................................................................................................23  (十一)抽象工厂模式.................................................................................................................28  (十二)状态模式.........................................................................................................................32  (十三)适配器模式.....................................................................................................................34  (十四)备忘录模式.....................................................................................................................37  (十五)组合模式.........................................................................................................................39  (十六)迭代器模式.....................................................................................................................45  (十七)单例模式.........................................................................................................................46  (十八)桥接模式.........................................................................................................................47  (十九)命令模式.........................................................................................................................49  (二十)责任链模式.....................................................................................................................52  (二十一)中介者模式.................................................................................................................54  (二十二)享元模式.....................................................................................................................56  (二十三)解释器模式.................................................................................................................59  (二十四)访问者模式.................................................................................................................61
(一)简单工厂模式 主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来 根据输入的条件产生不同的类,然后根据不同类的 virtual 函数得到不同的结果。  GOOD:适用于不同情况创建不同的类时  BUG:客户端必须要知道基类和工厂类,耦合性差 (工厂类与基类为关联关系) 例:  //基类  class COperation  {  public:  int m_nFirst;  int m_nSecond;  virtual double GetResult()  {  double dResult=0;  return dResult;  }  };  //加法  class AddOperation : public COperation  {  public:  virtual double GetResult()  {  return m_nFirst+m_nSecond;  }
};  //减法  class SubOperation : public COperation  {  public:  virtual double GetResult()  {  return m_nFirst­m_nSecond;  }  };  //工厂类  class CCalculatorFactory  {  public:  static COperation* Create(char cOperator);  };  COperation* CCalculatorFactory::Create(char cOperator)  {  COperation *oper;  //在 C#中可以用反射来取消判断时用的 switch,在 C++中用什么呢?RTTI??  switch (cOperator)  {  case '+':  oper=new AddOperation();  break;  case '­': oper=new SubOperation();  break;  default: oper=new AddOperation();  break;  }  return oper;  }  客户端  int main()  {  int a,b;  cin>>a>>b;  COperation * op=CCalculatorFactory::Create('­');  op­>m_nFirst=a;
op­>m_nSecond=b;  cout<GetResult()<
public:  AddOperation(int a,int b)  {  m_nFirst=a;  m_nSecond=b;  }  virtual double GetResult()  {  return m_nFirst+m_nSecond;  }  };  class Context  {  private: COperation* op;  public:  Context(COperation* temp)  {  op=temp;  }  double GetResult()  {  return op­>GetResult();  }  };  //客户端  int main()  {  int a,b;  char c;  cin>>a>>b;  cout<<”请输入运算符:;  cin>>c;  switch(c)  {  case ‘+’:  Context *context=new Context(new AddOperation(a,b));  cout<GetResult()<
return 0;  }  策略与工厂结合  GOOD:客户端只需访问 Context 类,而不用知道其它任何类信息,实现了低耦合。 在上例基础上,修改下面内容  class Context  {  private: COperation* op;  public:  Context(char cType)  {  switch (cType)  {  case '+':  op=new AddOperation(3,8);  break;  default: op=new AddOperation();  break;  }  }  double GetResult()  {  return op­>GetResult();  }  };  //客户端  int main()  {  int a,b;  cin>>a>>b;  Context *test=new Context('+');  cout<GetResult()<
软件实体可以扩展,但是不可修改。即对于扩展是开放的,对于修改是封闭的。面 对需求,对程序的改动是通过增加代码来完成的,而不是改动现有的代码。 当变化发生时,我们就创建抽象来隔离以后发生同类的变化。 开放――封闭原则是面向对象的核心所在。 开发人员应该对程序中呈现出频繁变化 的那部分做出抽象,拒绝对任何部分都刻意抽象及不成熟的抽象。 里氏代换原则 一个软件实体如果使用的是一个父类的话,那么一定适用其子类。而且它察觉不出 父类对象和子类对象的区别。也就是说:在软件里面,把父类替换成子类,程序的行为没有 变化。 子类型必须能够替换掉它们的父类型。 依赖倒转原则 抽象不应该依赖细节,细节应该依赖抽象。即针对接口编程,不要对实现编程。 高层模块不能依赖低层模块,两者都应依赖抽象。 依赖倒转原则是面向对象的标志,用哪种语言编写程序不重要,如果编写时考虑的 是如何针对抽象编程而不是针对细节编程,即程序的所有依赖关系都终止于抽象类或接口。 那就是面向对象设计,反之那就是过程化设计。 (三)装饰模式 动态地给一个对象添加一些额外的职责(不重要的功能,只是偶然一次要执行) ,就增 加功能来说,装饰模式比生成子类更为灵活。建造过程不稳定,按正确的顺序串联起来进行 控制。 GOOD:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功 能),就会增加类的复杂度。装饰模式就是把要添加的附加功能分别放在单独的类中,并让 这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功
能包装对象。 例 #include   #include   using namespace std;  //人  class Person  {  private: string m_strName;  public:  Person(string strName)  {  m_strName=strName;  }  Person(){}  virtual void Show()  {  cout<<"装扮的是:"<Show();  }  };  //T 恤  class TShirts: public Finery  {  public:  virtual void Show()  {
分享到:
收藏