设计模式
珠峰之巅-程序员
这个作者很懒,什么都没留下…
展开
-
迭代器模式C++实现
#pragma once#include"Book.h"#include<vector>class BookShelf {private: std::vector<Book> books;public: class Iterator; friend class Iterator; class Iterator { B...原创 2020-03-12 22:22:25 · 166 阅读 · 0 评论 -
责任链模式
责任链模式:为请求创建了一个接收者对象的链,这种模式给予请求的类型,对请求的发送者和接受者进行解耦。意图:避免请求发送者与接受者耦合在一起,让多个对象都有可能接收请求,经这些对象连接成一条链,并且沿着这条链传递请求,直到处理它为止。主要解决:责任链上的处理者负责处理请求,客户只需要将请求方到职责链上即可,无须关系请求的处理细节和请求的传递,所以职责链经请求的发送者和请求的处理解耦了。1转载 2016-12-22 15:02:41 · 449 阅读 · 0 评论 -
命令模式
命令模式是一种数据驱动的行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适对象,并把给命令传递给相应的对象,该对象执行命令。实现:我们首先创建作为命令接口Order,然后创建作为请求的Stock类。实体命令类BuyStock和sellStock,实现了Order接口,将执行实际的命令处理。创建作为调用类的Braoker,它接受订单并且能下订单。1转载 2016-12-22 15:21:17 · 240 阅读 · 0 评论 -
迭代器模式
迭代器模式:这种模式用于顺序访问集合对象的元素,不需要知道结合对象的底层表示意图:提供一种方法顺序访问一个聚合对象中各个元素,而又无需暴露对象内部表示优点:1.它支持以不同的方式遍历一个聚合对象 2.迭代器简化了聚合类 3.在同一个聚合上可以由多个遍历 4.迭代器模式中,增加新的聚合类和迭代器类很方便步骤1.创建接口public interface Iterator{ pub转载 2016-12-22 15:46:27 · 259 阅读 · 0 评论 -
中介者模式
用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。转载 2016-12-22 15:49:52 · 278 阅读 · 0 评论 -
备忘录模式
备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行文模式。主要解决:所谓的备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,可以在以后将对象恢复到保存的状态。实现: 备忘录模式使用三个类Memoto、Originator和CareTaker。Memoto包含了要被恢复的对象的状态。Originator创建并在Memen转载 2016-12-22 16:00:37 · 319 阅读 · 0 评论 -
观察者模式
观察者模式:当对象存在一对多关系时,则使用观察者模式。比如,当一个对象被修改是,则会自动通知它的依赖对象。实现:观察者模式使用三个类Subject、Obsever和Client。Subject对象带有绑定观察者到Client对象和从Client对象解绑观察者的方法。1.创建Subjectclass Subject{ List observers=new ArrayList(转载 2016-12-22 16:12:19 · 377 阅读 · 0 评论 -
状态模式
类的行为基于它的状态改变的。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的context的对象。1.创建一个接口interface State{ doAction(Context context);}2.创建实现接口的实体类class StartState implements State{ doAction(Context cont转载 2016-12-22 16:18:00 · 288 阅读 · 0 评论 -
空对象模式
在空对象模式中,一个空对象取代NULL对象实例的检测。反应一个不做任何动作的关系,NULL对象也可以在数据不可用的时候提供默认的行为。实现: public class NullCustomer extends AbstractCustomer{ String getName(){} boolean isNi1(){} }转载 2016-12-22 16:25:49 · 294 阅读 · 0 评论 -
策略模式
在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。使用场景:1.如果一个系统里面有许多类,他们之间的区别在于他们的行为,使用策略模式可以动态让一个对象的许多行为选择一种行为 2.一个系统需要动态几种算法选择一种3.如果一个对象有很多行为,不恰当的使用会产生很多条件选择转载 2016-12-22 16:35:28 · 292 阅读 · 0 评论 -
模板方法
在模板方法中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重新方法实现,但调用将以抽象类中定义的方式进行。属于行为模式。转载 2016-12-22 16:38:33 · 287 阅读 · 0 评论 -
访问者模式
在访问者模式中,使用一个访问者类,改变元素类的执行算法。通过这种方式,元素执行算法可以随着访问改变而改变。这种设计模式属于行为型的模式。实现:创建一个定义接受操作的ComputerPart接口。Keyboard、Mouse、Monitor和Computer实现了ComputerPart接口实体类。定义了另一个接口ComputerPartVisitor,定义了访问者类的操作。1.定义一个转载 2016-12-22 16:48:20 · 344 阅读 · 0 评论 -
代理模式
代理模式的定义是:给某一个对象提供一个代理,并有代理对象控制对原对象的应用代理模式包含 如下角色:ISubject:抽象主题角色,是一个接口。该接口是对象和它的代理共用的接口RealSubject:真实的主题角色,是实现抽象主题接口的类Proxy:代理角色,内部含有对真实对象RealSubject的引用,从而可以操作真实对象。代理对象提供与真实对象相同的接口,以便在任何时刻都能代替转载 2016-12-22 14:44:30 · 353 阅读 · 0 评论 -
工厂模式的原理
1.创建一个接口public interface Shape{ void draw();}2.创建实现接口的实体类public class Rectangle implements Shape{ public void draw(){ sysout("inside Rectangle");}}public class Square impl原创 2016-12-21 14:30:05 · 675 阅读 · 0 评论 -
抽象工厂模式
1.创建Shape接口2.创建Rectangle、Square、Circle等具体的类3.创建Color接口4.创建Red,Yellow等具体的类5.创建抽象工厂public abstract class AbstractFactory{ abstract Color getColor(String Color); abstract Shape getSh原创 2016-12-21 14:37:59 · 286 阅读 · 0 评论 -
单例模式的实现
1.懒汉式,线程不安全pubblic class Singleton{ private static Singleton instance; private Singleton(){} public static Singleton getInstance(){ if(instance==null){ instance=new Si原创 2016-12-21 14:49:08 · 321 阅读 · 0 评论 -
建造者模式
概念:建造者模式使用多个简单的对象一步一步构建成一个复杂的对象,这种类型属于创建型模式,它提供了一种创建对象的最佳方法。主要解决:通常有各个部分的的子对象用一定的算法构成;由于需求的变化,这个复杂的对象的各个部分经常面临剧烈的变化,但是他们组合在一起的算法相对稳定。1.创建一个表示食物条目的接口public interface Item{ public String name(原创 2016-12-21 15:22:05 · 472 阅读 · 0 评论 -
原型模式
原型模式:是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它听了一种创建对象的最佳方式。这种模式实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时则采用这种模式。如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在一个请求是返回它的克隆,在需要时更新数据库,以此来减少数据库的调用。使用场景:资源优化场景,类初始化需原创 2016-12-21 15:46:46 · 348 阅读 · 0 评论 -
适配器模式
适配器模式:是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构性模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类复制加入独立的或不兼容的接口功能。如读卡器功能,内存卡和电脑之间的适配器原创 2016-12-21 15:59:34 · 284 阅读 · 0 评论 -
桥接模式
桥接模式:用于把抽象化与实现化解耦,使得二者可以独立变换。这种涉及模式属于结构型模式,通过抽象化与实现化之间的桥接结构,实现二者的解耦。1.先定义Implementor接口的,代码如下:public interface Implementor{ public void operationImpl();}2.定义Abstraction接口,器实现成为抽象类,代码如下:pu原创 2016-12-21 16:37:11 · 360 阅读 · 0 评论 -
过滤器模式
过滤器模式:过滤器模式或标准模式是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式吧他们连接起来,这种类型的设计模式属于结构型模式。实现:将创建一个Person对象、Criteria接口和实现了该接口的实体类,来过滤Person对象的列表。1.创建一个类,在该类上应用标准Person.java public class Pe原创 2016-12-22 10:12:51 · 395 阅读 · 0 评论 -
组合模式
尽量用组合少用继承原创 2016-12-22 10:15:24 · 305 阅读 · 0 评论 -
装饰器模式
装饰者模式:动态的将 责任附加到对象上,若要扩展对象,装饰者模式提供了比继承更弹性的使用场景:对象有主题+许多可选的布局或者功能构成,使用继承或者接口会产生很多类,且很难扩展。如,现在需要一个汉堡,主题是鸡腿堡,可以选择添加生菜、酱、辣椒等许多其他的配料,使用装饰者模式。public abstract class Humburger{ protect String name;原创 2016-12-22 10:43:05 · 349 阅读 · 0 评论 -
外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并想客户端提供了一个客户端可以访问系统的接口。这种类型的设计结构型,隐藏系统的复杂性。1.创建一个接口public interface Shape{ void draw();}2.创建一个接口的实现类public class Rectangle implements Shape{ public void d原创 2016-12-22 10:56:47 · 300 阅读 · 0 评论 -
Reactor设计模式
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些。通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽。 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量。 先用比较直观的方式来介绍一下这种方式的优点,通过和常用的转载 2014-12-20 10:27:30 · 503 阅读 · 0 评论