
设计模式
文章平均质量分 78
_cdcupt
cs大法好
展开
-
适配器模式
设计理念将一个类的接口,转换成客户期望的另一接口。适配器让原本接口不兼容的类可以无间合作。 适配器提供客户类需要的接口,适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。因此,适配器可以使由于接口不兼容而不能交互的类可以一起工作。这就是适配器模式的模式动机原创 2017-08-17 00:24:24 · 304 阅读 · 0 评论 -
命令模式
设计理念将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。这就是命令模式的模式动机。考虑现实我们在开发的过程中经常会遇到这样的场景吧:我们需要执行一个时间特别长的任务,如果我们将这个长任务与其他的任务原创 2017-08-13 20:10:01 · 284 阅读 · 0 评论 -
抽象工厂模式
设计原理提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建。当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、有效率。 这里还是举原创 2017-08-05 21:47:04 · 210 阅读 · 0 评论 -
工厂方法模式
模式原理定义了一个创建对象的接口,但由子类决定要实例化的是哪一个。工厂方法让类把实例化推迟到子类。 工厂方法将具体按钮的创建过程交给专门的工厂子类去完成,例如在特斯拉的汽车产品线中,我们先定义一些抽象的产品线工厂类,再定义具体的工厂类来生成发动机、轮、底盘,它们实现在抽象按钮工厂类中定义的方法。这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品,如果出现新的产品线,只需要为这种新原创 2017-08-05 20:24:04 · 198 阅读 · 0 评论 -
装饰者模式
设计理念动态的将责任附加到对象身上,若要拓展功能,装饰者提供了比继承更有弹性的替代方案。与继承关系相比,关联关系的主要优势在于不会破坏类的封装性,而且继承是一种耦合度较大的静态关系,无法在程序运行时动态扩展。在软件开发阶段,关联关系虽然不会比继承关系减少编码量,但是到了软件维护阶段,由于关联关系使系统具有较好的松耦合性,因此使得系统更加容易维护。当然,关联关系的缺点是比继承关系要创建更多的对象。使用原创 2017-08-04 23:12:55 · 165 阅读 · 0 评论 -
观察者模式
设计理念定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 我们可以想象订阅报纸的场景,当我们订阅某日报时当天的日报就会准时到达我们手中,而对于我们不关心的报刊只要我们不订阅他们我们就不会受到关于他们的信息。也就是说通过订阅的方式,我们与报刊之间产生了依赖的关系,而且通常是某日报同时发放到多个订阅者手中。当日报发生更新是,订阅者也会得到通知。原创 2017-08-04 22:03:37 · 196 阅读 · 0 评论 -
策略模式
前言在《Effective c++》第35条例中,了解到有关策略模式的设计方法,在此梳理一遍策略模式的相关内容。Strategy的设计理念在《Effective c++》的条款35中有提到“人物健康指数的计算与人物类型无关”,与NVI手法(用一个non-virtual函数接口来调用相应的priavte virtual函数算法,即相当于嵌入了一层装饰参考Template Method模式)不同的是St原创 2017-04-29 18:52:40 · 267 阅读 · 0 评论 -
状态模式
设计理念允许对象在内部状态改变时改变他的行为。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。状态模式通过把各种状态转移逻辑分不到State的子类之间,相比于通过硬编码的状态机会减少相互间的依赖。UML类图Context: 环境类,它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的原创 2017-08-18 00:33:52 · 362 阅读 · 0 评论 -
代理模式
设计理念为另一个对象提供一个替身或占位符以控制对这个对象的访问。通过引入一个新的对象来实现对真实对象的操作或者将新的对 象作为真实对象的一个替身,这种实现机制即 为代理模式,通过引入代理对象来间接访问一 个对象,这就是代理模式的模式动机。代理模式通过引入一个新的对象,来实现对真实对象的操作或者将新的对象作为真实对象的一个替身,即代理对象。它可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对原创 2017-08-17 20:58:18 · 217 阅读 · 0 评论 -
单例模式
模式原理确保一个类只有一个实例,并提供一个全局的访问点。简单来说单利模式需要保证在整个程序的生命周期中,单例类只存在一个可访问的的实例。这样的应用场景有很多,如线程池或数据库连接池在程序中通常只允许存在一份实例,这时就可以通过单利模式来保证。 为了保证一份实例,单利类内部构造函数以及析构函数都作为私有成员,此时只有一个getter接口暴露出来供用户调用。对于一开始就生成一个静态实例和在有需要的情况原创 2017-08-10 15:41:36 · 212 阅读 · 0 评论 -
模板方法模式
设计理念在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。为了提高代码的复用性和系统的灵活性,模板方法模式将实现功能的每一个步骤所对应的方法称为基本方法(例如“点单”、“吃东西”和“买单”),而调用这些基本方法同时定义基本方法的执行次序的方法称为模板方法原创 2017-08-17 16:51:12 · 346 阅读 · 0 评论 -
外观模式
设计理念提供统一的接口,用来访问子系统中的一群接口。 外观模式有个最大的特点就是将细粒度的对象包装成粗粒度的对象,一般通过访问这个外观对象,来完成细粒度对象的调用。 外观模式一般是分布式应用和系统架构中的应用服务层的设计中常用的方式,并且一般结合外观模式+DTO(Data Transfer Object,数据传输对象)来完成服务层的设计,提供分布式应用服务的高效服务,外观模式我们可以这样理解,我原创 2017-08-17 10:00:45 · 313 阅读 · 0 评论 -
Reactor模型
模型详解Reactor模式是处理并发I/O比较常见的一种模式,用于同步I/O,中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程/进程阻塞在多路复用器上;一旦有I/O事件到来或是准备就绪(文件描述符或socket可读、写),多路复用器返回并将事先注册的相应I/O事件分发到对应的处理器中。Reactor是一种事件驱动机制,和普通函数调用的不同之处在于:应用程序不是主动的调用转载 2017-08-28 00:49:24 · 490 阅读 · 0 评论