![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
L7256
这个作者很懒,什么都没留下…
展开
-
Qt--通过观察者模式实现信号槽
前提:1.熟悉了观察者模式,不熟悉看这个观察者模式2.了解Qt的信号和信号槽。1.Qt中的信号和信号槽在Qt中-----准备工作1.定义A对象, 定义A对象的信号signal-A2.定义B对象,定义B对象的slot函数3.connect函数:将A对象发出的signal-A, 和B对象执行的slot函数绑定起来。信号触发4.A发出信号signal-A5.B收到signal-A就会执行slot函数2.本质的解析3.connect函数执行的动作:其实就是一个B对象订阅signal-A的动原创 2022-04-17 18:17:54 · 955 阅读 · 0 评论 -
设计模式 观察者模式
Object: 目标ObjectCake: 具体目标Observer: 观察者ConcreteObserver_1: 具体观察者可想象一个场景具体观察者(ConcreteObserver_1)狗,猫,鸭子在看一个具体目标(ObjectCake),然后要看ObjectCake,1. 需要具体的观察者ConcreteObserver_1去向ObjectCake注册(registerObserver)2.当ObjectCake内容变化,通知给注册到了vector中的对象(notifyObs..原创 2022-01-18 18:21:20 · 363 阅读 · 0 评论 -
模板方法模式
模板方法模式是设计模式行为型中最简单的一种设计模式。在实际中你甚至可能经常用到,只是你自己不知道它是一种设计模式罢了。模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。角色:抽象类(AbstractClass): 定义抽象的原语操作,具体的子类将重定义它们以实现一个算法,实现一个模板方法,定义一个算法的骨架。该模板方法不仅调用原语操作,也调用定义具体子类 (ConcreteClass): 实现原语操作以完成算法中转载 2022-01-06 17:55:54 · 50 阅读 · 0 评论 -
单例模式:懒汉,饿汉模式
#include <iostream> using namespace std;class Hungry {public: Hungry() { cout << "Hungry" << endl; cout << "mHungry: " << mHungry << endl; } static Hungry* getInstance() { cout << "mHungry: " &.原创 2021-10-20 00:38:20 · 136 阅读 · 0 评论 -
C++状态模式
定义一个状态基类state,然后继承出来两个状态:company和home,通过stateManger类去管理当前状态,状态切换。这个模式感觉像是把一个过程的状态切开分为很多个小段,各个状态只通过一个管理类去维护。#include <stdlib.h>#include <iostream>#include <string>using namespace std;class state {public: virtual state* getSt原创 2021-10-03 22:48:32 · 117 阅读 · 0 评论 -
C++观察者模式
现在假设一种情形:一个人(person)要去看公告(Note)的内容,需要Note去setNews(string);设置发布的内容,那么写下来就是一个Note类和person类,两个类根据需求写一些代码,写下来就是下面这样。。#include <stdlib.h>#include <iostream>#include <string>using namespace std;class Note {public: void setNews(str原创 2021-10-03 16:11:41 · 203 阅读 · 0 评论 -
C++装饰模式
参考:设计模式C++实现(11)——装饰模式1. 首先如果有一台手机,并且你一直在不停的换手机,那么可以关于手机抽象一个类(person),在用具体的手机(iphone)去继承,并通过多态转换(iphone*转person*),从而可以调用统一的抽象接口(phoneTmp->showLook()),这样无论,你换哪个手机,调用的方法(phoneTmp->showLook())都不会变,只会增加代码,不会修改代码。完美符合开闭原则。#include <stdlib.h>.原创 2021-10-02 09:30:00 · 578 阅读 · 0 评论 -
浅谈开闭原则
#include <iostream>#include "stdio.h"#include <string>class caculator { public: int getresult(int a, int b, std::string type) { if (type == "+") { return a+b; } else if (type == "-") { .原创 2021-09-26 02:39:40 · 78 阅读 · 0 评论 -
代理模式(迪米特法则)
为其他对象提供一种代理以控制对这个对象的访问。举个例子,工厂,代理商,客户三者,工厂(Application)不希望客户知道我的生产细节,工厂位置等等,但想客户知道我的价格,产品用途。于是派出一个代理商(agent),代理商包装工厂产品的价格,用途,功效等等、。于是客户(client)去想去买工厂的产品,不用去工厂,找代理商就可以了。。例子很简单,中心思想:把客户需要的功能继承成一个代理类,需要什么,就去代理类去复写。。。// 代理模式#include "iostream"class fa原创 2021-05-23 16:44:55 · 173 阅读 · 0 评论 -
策略模式-
如现在你是一个设计师,你正在设计一种空调。但是你们的空调要支持3种模式。冷风模式(ColdWind), 热风模式(WramWind),无风模式(NoWind)。当选择ColdWind模式,将输送冷风;当选择WarmWind模式,将输送热风;在选择NoWind模式时,空调什么都不做。你将考虑如何为空调设计应用程序?如果将来空调需要增加支持新的模式呢?这道面试题,其实可以用各种模式实现,然而在这里我理解策略模式比较合适。我们将冷风模式,和热风模式以及无风模式可以理解为各种不同的算法。显然策略模...转载 2021-05-20 11:56:21 · 165 阅读 · 0 评论 -
简单工厂模式&&工厂方法模式
参考:三种工厂模式的C++实现1.简单工厂模式要理解这个模式,需要预设一个条件,就是子类(XSLsoap,SFJsoap)的实现,与main中去调用factory的是2个人。。抽象出一个肥皂工厂(soapBase)父类,然后具体的子类(XSLsoap,SFJsoap)去继承父类。。。在通过具体工厂类(Factory)去写代码的地方进行调用。优点:相比直接去创建子类(XSLsoap,SFJsoap),调用Factory去创建子类,比较解耦,能够比较少的去改变main中代码。缺点:当添加子类原创 2021-05-20 11:13:05 · 84 阅读 · 0 评论 -
c++单例模式
目的:为了使得系统中的某个对象只初始化一次。。这个目的我的第一个想法就是我系统初始化我只new一次就可以了麻,但当程序过大的时候,有时会忘记从而再次初始化,浪费调试的时间。。所以如果在写程序的时候,就可以避免对象被new两次就可以让程序更少bug,那么这个程序就很nice.........public即可在类的外部使用new()来初始化对象,但如果是private则不能在类的外部使用new(),所以只能类自己来构造。 类中的static成员static成员它不像普通的数据成员,static数据成员原创 2021-05-01 22:48:44 · 94 阅读 · 0 评论