
设计模式
流沙-岁月
这个作者很懒,什么都没留下…
展开
-
观察者模式
定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,而观察者只需注册主题后,就可以获取通知,若不想继续观察主题,让主题在观察者列表中删掉对应观察者就好了。适用场景:1原创 2016-08-28 18:46:39 · 461 阅读 · 0 评论 -
代理模式
用处:为某个对象提供代理以控制对对象的访问。在某些情况下我们无法直接使用或访问对象,所以需要使用一层代理,通过代理访问对象。典型如网络中的代理服务器,网页加载时文字先加载,一些图片,视频后加载,在初期只提供这些这些资源开销大的对象的一个代理。 代理原创 2016-08-16 22:09:15 · 267 阅读 · 0 评论 -
装饰器模式
装饰器模式用来给一个对象动态的添加额外功能,是继承的一种替代模式。它比继承更为灵活,有时我们希望只给某个对象添加功能,而不是整个类添加功能。实现:将需要装饰的对象嵌入装饰器中,由装饰器添加额外的功能。代码:#include #include #include #include #include #include #include #include #incl原创 2016-08-07 20:45:49 · 319 阅读 · 4 评论 -
策略模式
定义:将一系列相关算法封装成算法簇,使它们可以相互替换。使算法可以独立于使用者而变换。适用场景:当类的行为经常发生变化时,可将其行为提取出来,将不同的行为封装成一个算法簇,对使用者只提供一个抽象接口。这样也满足了OO三大原则:封装变化,针对接 口编程,多用组合少用继承组成:strategy: 定义所有支持的算法的公共接口concrete strategy: 实现了具体的算法行原创 2016-08-21 16:04:04 · 325 阅读 · 0 评论 -
工厂模式
用处:隐藏了对象创建的细节,只需要知道对象的类型,就可以用对应的工厂子类创建产品。用户看到和使用的只是一个抽象产品,而无需关心到底返回了那个子类。关键代码:将产品的创建延迟(交给)到子类; 返回的是一个抽象产品优点:遵循了开闭原则缺点:每增加一个新的产品,就需要新增一个子类,产品多时,维护量大。代码:#include #include #include #include原创 2016-08-10 13:36:12 · 292 阅读 · 0 评论 -
桥接模式
定义:将抽象部分与实现部分分离,使它们都可以独立的变化。用处:桥接模式就将实现与抽象分离开来,使得RefinedAbstraction依赖于抽象的实现,这样实现了依赖倒转原则,而不管左边的抽象如何变化,只要实现方法不变,右边的具体实现就不需要修改,而右边的具体实现方法发生变化,只要接口不变,左边的抽象也不需要修改。适用场景:1.当一个对象有多个变化因素的时候,考虑依赖于抽象的实现,而不原创 2016-09-03 16:28:12 · 272 阅读 · 0 评论 -
抽象工厂模式
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long longusing nam原创 2016-08-14 15:00:26 · 203 阅读 · 0 评论 -
适配器模式
作用:使原本因接口不兼容而不能一起工作的类能够协同工作。适用场景:当想复用某个类,而类的接口与环境不符,此时可以考虑使用适配器模式。用适配器封装被适配的对象,让接口由适配器提供,具体功能由被适配对象提供。关键代码:1.target:目标接口2.adptee:被适配对象3.adpter:适配器实现:有类适配器和对象适配器,如下图:图1:类模式适配器原创 2016-08-14 15:53:14 · 274 阅读 · 0 评论