juice

【C++设计模式】工厂模式

限于喜欢 提交于 2019-12-06 22:32:39
最近打算总结一下设计模式(希望可以坚持写完...)。 设计模式大体上可以分为三种: 1)创建型(5种) 具体包括:工厂方法(包括简单工厂),抽象工厂,单例,建造者,原型 2)结构型模式(7种) 具体包括:适配器,桥接,组合,装饰器,代理,外观,享元 3)行为型模式(11种) 具体包括:策略模式,模版方法,命令,职责链,状态,观察者,中介者,迭代器,访问者,备忘录,解释器 创建型模式的技巧主要应用于创建对象的方式上。 结构性模式的技巧主要在于对不同类之间的组合以实现代码复用。 行为型模式的技巧在于不同类之间的相互作用及相互影响。 创建型模式 1)简单工厂模式 简单工厂一般只包含一个工厂,以及产品抽象类及其子类。 优点:实现了对象的创建与使用的分离。 缺点: 每增加一个产品都要修改原来的代码,且需要不断增加新的逻辑。 enum fruits{ APPLE, GRAPE } //果汁抽象类 class Juice{ public: virtual void show() = 0; } //果汁具体类,苹果汁 class AppleJuice : public Juice{ public: void show(){ cout<<"AppleJuice"<<endl; } } //果汁具体类,葡萄汁 class GrapeJuice : public Juice{ public: void

设计模式之依赖倒置原则

旧时模样 提交于 2019-12-06 08:18:16
  抽象的艺术才有生命力 高层与底层组件之间都应该依赖于抽象的组件。这一条深刻揭示了抽象的生命力,抽象的对象才是最有表达能力的对象,因为它通常是“无形”的,可以随时填充相关的细节。   英文缩写DIP(Dependence Inversion Principle)。   原始定义:High level modules should depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details www.szihome.net should depend upon abstractions.   翻译过来就三层含义:   高层模块不应该依赖低层模块,两者都应该依赖其抽象;   抽象不应该依赖细节;   细节应该依赖抽象。 抽象:即抽象类或接口,两者是不能够实例化的。 细节:即具体的实现类,实现接口或者继承抽象类所产生的类,两者可以通过关键字new直接被实例化。 现在我们来通过实例还原开篇问题的场景,以便更好的来理解。下面代码描述了一个简单的场景,Jim作为人有吃的方法,苹果有取得自己名字的方法,然后实现Jim去吃苹果。      问题由来:类A直接依赖类B,假如要将类A改为依赖类C