
设计模式
文章平均质量分 70
vegetablesssss
一只菜鸟。
展开
-
行为型模式-策略模式
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换,策略模式让算法独立于使用它的客户而独立变化。策略模式中的角色和职责Context(环境类):环境类是使用算法的角色,它在解决某个问题(即实现某个方法)时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略。Strategy(抽象策略类):它为所支持的算法声明了抽象方法,是所有策略类的父类,它可以是抽象类或具体类,也可以是接口。环境类通过抽象策略类中声明的方法在运行时调用具体策略类中实现的算法。原创 2021-02-06 10:57:30 · 110 阅读 · 0 评论 -
行为型模式-命令模式
将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。 命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespa原创 2021-02-03 10:29:14 · 162 阅读 · 0 评论 -
行为型模式-模板方法模式
用来对类或对象怎样交互和怎样分配职责进行描述。原创 2021-02-01 16:04:42 · 84 阅读 · 0 评论 -
结构型模式-适配器模式
将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式中的角色和职责 Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。 Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。 Adaptee(适配者类):适配者即被适配的角.原创 2021-01-29 16:41:48 · 106 阅读 · 0 评论 -
结构型模式-外观模式
根据迪米特法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。 Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。 个人认为这种模式就是类之间的组合。外观模式中角色和职责Façade(外观角色):为调用方, 定义简单的调用接口。SubSystem(子系统角色):功能提供者。指提供功能的类群(模块或子系统) 。#def原创 2021-01-29 15:54:14 · 162 阅读 · 0 评论 -
结构型模式-装饰模式
装饰模式又叫包装模式,通过一种对客户端透明的方式来扩展对象功能,是继承关系的一种替代。 装饰模式就是把要附加的功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择的、按顺序的使用装饰功能包装对象。装饰模式中的角色和职责Component(抽象构件):它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。ConcreteComponent(具体构件):它是原创 2021-01-29 09:13:56 · 204 阅读 · 0 评论 -
结构型模式-代理模式
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。模式中的角色和职责subject(抽象主题角色):真实主题与代理主题的共同接口。RealSubject(真实主题角色):定义了代理角色所代表的真实对象。Proxy(代理主题角色):含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真实主题对象之前或者之后执行某些操作,而不是单纯返回真实的对象。代理模式的案例#defi原创 2021-01-25 17:18:38 · 138 阅读 · 0 评论 -
创建型模型-抽象工厂模式
工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族,由同一个工厂来统一生产,这就是我们本文将要学习的抽象工厂模式的基本思想。...原创 2021-01-22 14:23:29 · 126 阅读 · 0 评论 -
创建型模型-单例模式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。单例模式中的角色和职责Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让客户可以访问它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;在单例类内部定义了一个Sin原创 2021-01-22 12:00:02 · 175 阅读 · 0 评论 -
面向对象设计原则
面向对象设计原则表名称定义单一职责原则(Single Responsibility Principle, SRP)★★★★☆类的职责单一,对外只提供一种功能,而引起类变化的原因都应该只有一个。开闭原则(Open-Closed Principle, OCP)★★★★★类的改动是通过增加代码进行的,而不是修改源代码。里氏代换原则(Liskov Substitution Principle, LSP)★★★★★任何抽象类出现的地方都可以用他的实现类进行替换,实际就是虚拟机制原创 2021-01-21 17:42:52 · 144 阅读 · 0 评论 -
创建型模型-工厂方法模式
工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。工厂方法模式中的角色与职责抽象工厂(Abstract Factory)角色:工厂方法模原创 2021-01-21 16:59:13 · 217 阅读 · 0 评论 -
创建型模型-简单工厂模式
简单工厂模式并不属于GoF的23种设计模式。 那么为什么我要用工厂模式呢?请看下面的一段程序。#include<iostream>using namespace std;//水果类class Fruit {public: Fruit(string name) { m_name = name; } void showFruitName() { if (m_name.compare("apple") == 0) { cout << "我是原创 2021-01-20 14:33:33 · 280 阅读 · 1 评论 -
行为型模式-观察者模式
随着交通信号灯的变化,汽车的行为也将随之而变化,一盏交通信号灯可以指挥多辆汽车。 观察者模式是用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。观察者模式中的角色和职责Subject(被观察者或目标,抽象主题):被观察的对象。当需要被观察的状态发生变化时.原创 2021-01-19 17:59:27 · 189 阅读 · 0 评论