设计模式
tianya_team
关注抖音号:天天coding,免费获得源码以及技术指导。
展开
-
工厂模式(上)
请先理解为什么要引入工厂模式?原创 2016-01-22 10:22:15 · 461 阅读 · 0 评论 -
模板方法模式
模板方法模式:在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 这个模式比较简单,下面先来看咖啡和茶的例子: #include using namespace std; class CaffeineBeverage{ public: virtual void prepareRecipe() final原创 2016-06-08 10:07:01 · 225 阅读 · 0 评论 -
观察者模式
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新。 注:注意有一个实现Observer接口的对象列表,可以随时增加观察者。 当有新的具体类需要当观察者,所有要做的就是在新的类里实现此观察者接口,然后注册为观察者即可。原创 2016-01-20 16:03:47 · 303 阅读 · 0 评论 -
策略模式
策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。原创 2016-01-20 14:31:01 · 310 阅读 · 0 评论 -
设计原则
1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。 2.针对接口编程,而不是针对实现编程。 针对实现编程: Dog d=new Dog(); //d是Dog的具体实现 d.bark(); //针对接口编程: Animal animal=new Dog(); //利用animal进行多态调用 animal.ma原创 2016-01-19 21:20:03 · 374 阅读 · 0 评论 -
外观模式
外观模式: 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 其目的是让接口更简单,将一个或数个复杂的一切都隐藏在背后,只露出一个干净美好的外观。 类图: 注意: 1)外观模式没有“封装”子系统的类,外观只提供简化的接口。客户如果觉得有必要,依然可以使用子系统的类。 2)外观和适配器的区别:适配器的意图是,“改变”接口符合客户的期望原创 2016-04-19 20:29:58 · 465 阅读 · 0 评论 -
适配器模式
适配器模式: 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 下面先看一个简单的适配例子: #include #include #include #include using namespace std; /*定义鸭子接口*/ class Duck{ public: virtual void quack() = 0; virtual原创 2016-04-19 16:00:09 · 410 阅读 · 0 评论 -
命令模式
命令模式: 将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的动作。 类图: 下面是一个简单的实现了两个命令及两个接收者: #include #include using namespace std; /*下面定义的是厂商提供的接收命令的对象(接收者)*/ class Light{ public: void on(){ cout原创 2016-04-18 09:50:01 · 363 阅读 · 0 评论 -
装饰者模式
装饰者模式原创 2016-01-21 15:40:11 · 337 阅读 · 0 评论 -
单例模式
单例模式: 确保一个类只有一个实例,并提供一个全局访问点。 单例模式类图: 经典单例模式实现: class Singleton{ private: static Singleton *uniqueInstance; Singleton(){} public: static Singleton *getInstance(){ if (uniqueInstance == NU原创 2016-02-22 15:03:45 · 237 阅读 · 0 评论 -
工厂模式(下)
依赖具体类的关系如下: 依赖抽象如下: 在应用工厂方法之后,高层组件(PizzaStore)和低层组件(下面这些披萨)都依赖了Pizza抽象。 依赖倒置原则,倒置在哪:从上图2可以看出低层组件依赖高层的抽象,同样高层组件也依赖同样的抽象。即现在高层和低层模块都依赖这个抽象。 避免违反依赖倒置原则的几个指导方针: 1)变量不可以持有具体类的引用。(如果使用new,变量就会持原创 2016-01-30 13:04:29 · 264 阅读 · 0 评论 -
代理模式
尽管Decorator的实现部分与代理相似,但Decorator的目的不一样。Decorator为对象添加一个或多个功能,而代理则控制对对象的访问。 意图: 为其他对象提供一种代理以控制对这个对象的访问。 适用性: 在需要用比较通用和复杂的对象指针代替简单的的指针的时候,使用代理模式。 1、远程代理,也就是为一个对象在不同的地原创 2018-01-13 17:28:05 · 308 阅读 · 0 评论