
设计模式
文章平均质量分 68
wb175208
这个作者很懒,什么都没留下…
展开
-
Python设计模式-桥接模式
桥接模式:将抽象和实现解耦,使他们可以独立的变化桥接模式是结构型模式,侧重于软件结构from abc import ABCMeta,abstractmethodclass Shape(metaclass=ABCMeta): def __init__(self,color): self.__color = color @abstractmethod ...原创 2020-04-12 20:30:06 · 174 阅读 · 0 评论 -
Python设计模式 - 模板模式
模板模式:定义一个操作中的算法的框架,而将算法中的某些步骤放到子类中实现,使得子类可以在不改变算法结构的情况下重新定义某些特定的步骤。from abc import ABCMeta,abstractmethodclass Template(metaclass=ABCMeta): @abstractmethod def stepOne(self): pass...原创 2020-04-12 20:15:56 · 144 阅读 · 0 评论 -
Python设计模式-访问者模式
访问者模式:封装一些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。核心思想:可以在不改变数据结构的前提下定义作用于这些元素的操作,将数据结构和操作进行解耦,而且能更方便的拓展操作from abc import ABCMeta,abstractmethodclass MyBook: def getName(self): ...原创 2020-04-12 19:51:30 · 181 阅读 · 0 评论 -
Python设计模式-享元模式
享元模式:运用共享技术有效地支持大量细粒度对象的复用。享元对象关键是区分内部状态和外部状态:内部状态:存储在对象内部并且不会随着环境改变而改变的状态外部状态:随着环境改变而改变的、不可以共享的状态,外部状态并且有客户端保存,通过客户端在需要的时候传入到对象内部。from abc import ABCMeta,abstractmethodimport loggingclass Pigm...原创 2020-04-12 10:36:01 · 179 阅读 · 0 评论 -
Python设计模式-备忘录模式
在不破坏内部结构的前提下捕获一个对象的内部状态,这样便可以在以后将该对象回复到原先的状态备忘录模式最大的作用就是备份,可以保存对象的一个状态备份,这样可以在将来的某一个时刻恢复到之前的状态。from abc import ABCMeta,abstractmethodclass Worker: def __init__(self,name): self.__name ...原创 2020-04-11 22:01:28 · 220 阅读 · 0 评论 -
Py设计模式-命令模式
命令模式:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。最大的特点就是:将具体的命令与对应的接受者相关联,使得调用方不用关心具体的行动执行者及如何执行,只要发送正确的命令,就能准确无误的完成相应的任务。from abc import ABCMeta,abstractmethodclass Chef(): d...原创 2020-04-10 21:57:32 · 180 阅读 · 0 评论 -
Python设计模式-工厂模式
工厂模式有三种模式:简单工厂模式:定义一个创建对象接口,通过参数来决定创建哪个类的实例工厂方法模式:定义一个创建对象接口,让子类来决定创建哪个类的实例,工厂方法使一个类的实例化延迟到到其子类中抽象工厂模式:提供一些列相关或相互依赖的对象接口,而指定他们的具体类from abc import ABCMeta,abstractmethod#引用ABCMeta和abstractmethod来...原创 2020-04-07 22:50:17 · 220 阅读 · 0 评论 -
Python设计模式-策略模式
策略模式:定义一系列算法,将每个算法都封装起来,并且使他们之间可以相互替换,使算法可以独立于使用于它的用户而变化。from abc import ABCMeta,abstractmethod#引用ABCMeta和abstractmethod来定义抽象类和抽象方法class IVehicle(metaclass=ABCMeta): @abstractmethod def r...原创 2020-04-06 13:46:05 · 203 阅读 · 0 评论 -
Python设计模式-适配器模式
适配器模式:将一个类的接口变成客户端期望的另外一种接口,从而是原本因为接口不匹配的类能够在一起工作。适配器模式有两种实现方式:一种是组合的公式,一种是继承的方式from abc import ABCMeta,abstractmethodclass SocketEntity: def __init__(self,numOfPin,typeOfPin): self.__...原创 2020-04-06 12:35:07 · 198 阅读 · 0 评论 -
Python设计模式-建造者模式
建造者模式:将一复杂的构建过程和它的表现分离出来,使同样的建造过程可以获取不同的表现。能够更加精确的控制复杂对象的创建过程,让使用者可以使用相同的创建过程创建不同的产品。from abc import ABCMeta,abstractmethodclass Toy(metaclass=ABCMeta): def __init__(self,name): self._n...原创 2020-04-04 20:39:08 · 198 阅读 · 0 评论 -
Python设计模式 -组合模式
组合模式:将对象组合成树形结构以表示“整体-部分”的层次关系。组合使得用户对单个对象和复合对象的使用具有一致性。组合模式的关键的就是,组件和组合的整体具有一个共同的基类。from abc import ABCMeta,abstractmethodclass CompterCompoent(metaclass=ABCMeta): def __init__(self,name): ...原创 2020-04-02 22:13:53 · 248 阅读 · 0 评论 -
Py设计模式-迭代器模式
迭代器模式:提供一种方法顺序地访问一组聚合对象(一个容器)中的各个元素,而又不需要暴露该对象的内部细节迭代器就是一个指向当前元素的指针,这个指针可以返回当前所指向的元素,可以移动到下一个元素,通过这个指针可以遍历容器总的所有元素。class Customer: """顾客""" def __init__(self,name): self.__name = na...原创 2020-03-31 22:42:22 · 132 阅读 · 0 评论 -
Python设计模式-外观模式
外观模式:为子系统的一组接口提供一个一致的界面,定义一个高层接口,让用户不用关心内部复杂的运行机制。class Register: def register(self): print("注册证")class Payment: def pay(self): print("缴费成功")class Dormittory: def meet...原创 2020-03-28 19:37:41 · 171 阅读 · 0 评论 -
Python设计模式-代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问。一个对象完成某项动作或者任务,是通过另外一个对象引用来完成的from abc import ABCMeta,abstractmethodclass Receiver(metaclass=ABCMeta): def __init__(self,name): self.__name = name def ...原创 2020-03-28 18:40:48 · 143 阅读 · 0 评论 -
Python设计模式-职责链模式
职责链模式:让多个对象都由可能接受请求,将这些接对象连接成一个责任链,并且沿着这条链传递请求,直到有对象处理它为止。from abc import ABCMeta,abstractmethodclass Person: def __init__(self,name,dayoff): self.__name = name self.__dayoff = ...原创 2020-03-27 23:11:16 · 186 阅读 · 0 评论 -
Python设计模式-克隆模式
克隆模式也叫原型模式,通过拷贝自身的属性来创建一个新的对象。原型模式的一个基本方法就是clone,在C++中属于深拷贝。from copy import copy,deepcopyclass Person: def __init__(self,name,age): self.__name = name self.__age = age def...原创 2020-03-27 21:29:22 · 332 阅读 · 0 评论 -
Python设计模式 - 单例模式
单例模式:确保一个类只有一个实例,并且提供一个访问它的全局方法class Singleton(object): __instance =None __isFirstInit = False\ def __new__(cls, name): if not cls.__instance: Singleton.__instance = ...原创 2020-03-24 20:25:54 · 125 阅读 · 0 评论 -
Python设计模式 -装饰模式
装饰模式:动态地给一个对象增加一些额外的职责,就拓展对象功能来说,装饰模式比生产子类更为灵活from abc import ABCMeta,abstractmethodclass Person: def __init__(self,name): self.__name = name @abstractmethod def wear(self): ...原创 2020-03-22 18:01:03 · 165 阅读 · 0 评论 -
Python设计模式-中介者模式
中介者模式:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式相互引用,从而使其耦合性降低,而且可以独立低改变他们之间的交互。from abc import ABCMeta,abstractmethodclass HouseInfo: def __init__(self,address,ower): self.__address = address ...原创 2020-03-21 22:40:33 · 222 阅读 · 0 评论 -
Python 设计模式 - 状态模式
状态模式:允许一个对象在其内部状态发生改变时改变其行为,是这个对象看上去就像改变了它的类型一样。核心思想就是一个事物有多种状态,在不同的状态下所表现出来的行为和属性不一样。from abc import ABCMeta,abstractmethodclass State(metaclass=ABCMeta): def __init__(self,name): sel...原创 2020-03-20 22:40:15 · 159 阅读 · 0 评论 -
Python设计模式-监听者模式
监听模式:在对象之间定义一种一对多的关系,当这个对象发生改变时,所有依赖它的对象都会被通知到。核心就是建立起被观察者和观察者之间的一种自动触发的关系。监听者模式是对象的行为模式,又叫发布/订阅模式、模型/视图模式、源/监听器模式或者从属者模式。from abc import ABCMeta,abstractmethodclass WaterHeater: def __init__(...原创 2020-03-19 22:51:02 · 597 阅读 · 0 评论 -
设计模式-命令模式之重新理解
命令模式:将请求封装成对象,以便是用不同的请求参数化其他对象,同时也支持撤销操作。命令把命令的动作和命令的接受者封装在一起,也就是发出请求的对象和接受与执行这些请求的对象分隔开来。为什么命令的发出者不直接调用执行者呢?反而在中间包装了一层命令呢?这样的封装是为了实现调用者和接受者之间的解耦,同时还可以设计出多种命令形式(业务)。#pragma once//命令基类class WCom...原创 2019-11-28 23:25:37 · 191 阅读 · 0 评论 -
设计模式-装饰模式之重新理解
装饰模式:动态地将责任或者功能添加到对象上,是对象又增加了除去本身外的其他功能。在设计过程中,大家都知道一些基本的原则,比如多用组合少用继承。但是装饰模式就是使用到的继承。装饰者和被装饰的对象必须是一样的类型,也就是有共同的基类。这是关键的地方,装饰者是对被装饰者的扩展装饰而来的,装饰者本身和被装饰者属于同一种类型,它们具有相同的接口,装饰者能够替代被装饰者。示例:定义飞机类#pragma...原创 2019-11-28 21:54:42 · 131 阅读 · 0 评论 -
对已有类库扩展封装的代理(装饰)模式的实现
在项目开发中,经常会使用第三方库,包括外部封装或者是公司内部自己封装的类库。在使用这些类库的过程中,有时这些类库并不能全部满足我们的需求,需要我们在这些类库的基础之上进行扩展,以满足我们自己的需求,但是由于各种原因,这个类库的源码和维护人员已经不能找到了,需要自己在现有代码的基础之上进行开发,这就需要使用设计模式中的代理来实现新功能的扩展。例如一个库中的新类,里面有创建各种设备的功能,但是现有的...原创 2019-11-23 14:05:06 · 224 阅读 · 0 评论 -
C++设计模式 - 代理模式详解三
6.强制代理现在的孩子都有QQ,QQ不仅可以交流,而且里面还有一些好玩的功能,特别是QQ的等级制度,更是成为了孩子们炫耀的资本。QQ等级升级是需要长时间的在线登陆才可以,但是小孩子的自制力又比较差,小孩子没有那么多精力来玩QQ,父母也不放心,更多的父母来代理孩子的QQ登陆,使它以保持长时间的在线来升级。孩子只需要在放假或者休息的时候,看看自己的账号等级就可以了。根据前两篇文章的介绍,咱们继...原创 2018-12-19 08:22:22 · 251 阅读 · 0 评论 -
C++设计模式 - 适配器模式详解
适配器模式:讲一个类的接口转换成客户期待的另一个接口,从而从根本上解决两个类无法在一起工作的情况。最近在做一个任务管理的项目,那么任务管理就应该有任务的基本属性进行配置、修改、获取属性信息等基本操作。咱们主要查看任务的基本信息的获取这部分内容。首先定义一个任务信息获取的接口类://定义信息基类class IInfo {public: IInfo(); ~IInfo(); //获...原创 2018-12-24 08:37:57 · 657 阅读 · 0 评论 -
C++设计模式 - 代理模式详解二
5.游戏代练收费上一篇文章提到了小明请游戏代练来帮助自己打游戏升级,但是游戏代练也不是白帮你玩的,小明需要付费给游戏代练。咱们定义一个付费的接口基类。class ICost {public: ICost(); ~ICost(); virtual void money();};#include "ICost.h"ICost::ICost() {}ICost::~...原创 2018-12-18 10:10:48 · 232 阅读 · 0 评论 -
C++设计模式 - 组合模式详解
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使得对单个对象和组合对象使用具有一致性。通俗一点就是,组合模式的设计整体就是一颗树形的数据结构。有根节点、树枝节点还由叶子节点。举个例子 士兵出去打仗,比如说连长带着几个班,班长带着几个士兵,这个模式就是一个典型的树形结构组织。这个怎么实现呢?首先抽象出一个士兵的基类。无论连长还是班长前提他们都是士兵提。//士兵基类class...原创 2018-12-23 10:23:25 · 618 阅读 · 2 评论 -
设计模式-备忘录模式-C++实现
备忘录模式:在不破坏分装性的前提下,保存对象的内部状态,并且在这个状态之外保存这个状态,这样可以以后恢复到这个状态。备忘录模式主要是为了保存当前对象的在某一个时刻的状态,而且可以在任何一个时刻恢复到当前的状态。当前对象和备忘录对象必须含有相同的属性变量。并且备忘录状态也封装保存起来。场景:1.必须保存一个对象在某一时刻的状态,这样可以以后在需要的时候,恢复到当前状态;2.如果让其他对象直接...原创 2018-11-06 23:14:31 · 551 阅读 · 0 评论 -
C++设计模式-备忘录模式详解
备忘录模式:在不破换封装性的前提下,获取一个对象的内部状态,并且在对象外保存这个状态,以后可以恢复到被保存的状态。大家都玩过游戏,在游戏的世界里你可以一往无前,不停的打怪升级。还有一个重要的特点就是,可以死而复生,也就是说,你在游戏世界中虽然被击败了但是复活继续战斗。游戏里面还会设置各种神奇的药水,保证你在受到攻击下还可以快速的恢复体力继续战斗。那么咱们根据以上场景搭建一个游戏玩家,这个玩家可...原创 2018-12-25 08:31:16 · 334 阅读 · 0 评论 -
C++设计模式-桥接模式详解
桥接模式:将抽象和实现解耦,使得两者可以独立的变化。如果同时变化的有两个维度,桥接模式可以很好的适应。原创 2018-12-30 00:54:13 · 211 阅读 · 0 评论 -
C++设计模式-访问者模式详解
访问者模式:重新定义对某个对象中各个元素的操作,在不改变数据结构的前提下,定义作用于这些元素的新操作。玩游戏的时候,经常会遇到各种各样的怪物,有的是级别比较低的怪物,有的是级别比较高的怪物,像终极的大BOSS。小级别的怪物比较好打,但是大级别的怪物就比较难打了,需要多次技进攻才可以。小级别的怪物之所以难打是因为他的生命值比较少,在打怪物的过程中可以时刻查看怪物的生命值,根据他们的生命值可以实时的...原创 2018-12-26 08:24:15 · 492 阅读 · 0 评论 -
设计模式总结-C++
到现在为止基本上已经把所有的设计模式都重新整理了一遍,也把常用的设计模式重点分析了一遍。希望对看做的读者有所帮助。设计模式定义了可复用的程序架构,这些模式都是在前人经验的基础上总结而来的,是在实际项目中验证过的一套完整的设计。很多同学觉得设计模式没有什么,或者只知道其中很少的一部分设计模式。其实所有的设计模式都是很值得每一位程序设计和开发人员认真去学习和研究的,重点是要理解里面的设计思想和设计...原创 2019-01-02 19:20:20 · 744 阅读 · 0 评论 -
C++面向接口编程浅谈
大家都知道C++和java都是面向对象的编程语言。面向对象语言的三个特征:继承、封装和多态,但是java和C++还是有许多的不同之处,除了语法之外还有一点不同就是java中有的接口这个概念和关键词,但是C++却没有接口这个概念。既然它们都是面向对象语言,也就有面向对象编程的特征,也就是把数据和对数据的处理(算法)封装在一起了。通过定义类使用类来定义类对象,然后这个对象就有了封装的数据和对数据的这...原创 2019-04-01 12:13:38 · 3783 阅读 · 0 评论 -
QGIS中MVC架构-接口的设计
QGIS是基于QT开源框架的二维地理信息处理工具,使用非常方便,同样也是开源的。大家除了使用QGIS加载显示二维地图矢量或者栅格数据外,还要在二维地图上显示一些其他的基于WGS84坐标系自定义数据,比如点、线和多边形等。除了显示以外还有有相应的数鼠标操作,比如鼠标选中或者鼠标进行拖动等。上面这些需求体现了一个程序中常见的三要素:数据、显示和操作。数据也就是模型(Model);显示(View)就是...原创 2019-05-03 12:31:29 · 1147 阅读 · 1 评论 -
多个对象互相调用中中介者设计模式的使用
C++对象之间的调用,可以通过对象+成员函数的方式实现,一般情况下,被调用的对象定义为成员变量,然后就可以被调用者进行调用了,这称为单向调用。单向调用指的是对象之间调用方向,函数调用只能从调用者对象调用被调用者对象。但是有时对象之间的调用也是互相的,也就是双向调用,调用者和被调用者没有明确的界限,有时需要对象A调用对象B的函数,有时需要对象B调用对象A的功能。对象之间的互相调用的也可以实现,在...原创 2019-06-07 21:29:06 · 597 阅读 · 0 评论 -
C++设计模式-外观模式详解
外观模式:要求一个子系统与外部通信必须通过一个同一的系统完成,也就是把一系列的子系统封装在一个同一的大系统中。子系统中的所有调用行为都是通过大系统提供同一的接口来完成。在一个绘图系统中,需要绘制各种这样的图形,比如说是矩形、圆形、直线等。那好我们就根据以上场景搭建一个简单的绘制场景。首先把各种绘制的图形定义出来。矩形://矩形class MyRectangle {public: MyR...原创 2018-12-22 13:41:43 · 240 阅读 · 0 评论 -
C++设计模式-中介者模式详解
中介者模式:用一个中介对象封装一系列对象的交互,中介者使各个对象不需要显示的相互调用,从而使其松耦合,并且可以独立的改变他们之间的交互。...原创 2018-12-28 01:01:44 · 357 阅读 · 0 评论 -
设计模式- 迭代器模式-C++实现
迭代器模式:提供一种方法可以顺序访问一个聚合对象中各个元素,而又不需要暴露给该对象的内部表示。场景:1.一个聚合对象,如数组、list,应该提供一种方法来让别人可以访问他的元素,而又不需要暴露他的内部结构;2.支持对聚合对象的多种遍历;3.为遍历不同的聚合对象结构提供一个统一的接口。迭代器模式主要实现了存储对象和读取遍历对象的分离。#include <stdio.h>#i...原创 2018-11-21 00:02:59 · 229 阅读 · 0 评论 -
设计模式-原型模式-C++实现
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。场景:1.这个类对象并不是一开始创建的,而是在运行过程中创建的,这样比较适合原型模式;2.当一个类的实例由不同的状态组合的情况下。建立相应数目的原型并克隆他们在合适的的装态下的实例。定义好复制的接口,有一个学生类继承这个接口,然后创建一个学生实例,但是会有很多的学生,可以通过拷贝接口生产很多的学生实体,只要通过接口修...原创 2018-11-18 17:07:35 · 172 阅读 · 0 评论