软件工程
ton_tom
柯镇恶的师弟理所当然不可不戒
展开
-
MVC 模式的c++例子与理解
主动与被动模式#include<iostream>#include<vector>using namespace std;class Observer{public: virtual void update(void *) = 0;};//这样可以大大提高View的可重复使用性class Observable{public: void addObserver(Observer* a){observers.push_back(a);} .原创 2021-05-26 13:17:48 · 829 阅读 · 0 评论 -
信息系统项目的生命周期模型(软件过程模型) 学习
文章目录瀑布模式螺旋模型迭代模式瀑布模式类似瀑布从一个阶段到另一个阶段,他是计划驱动的软件过程的一个例子,理论上,在开始工作之前,必须对所有的过程活动制订计划并给出进度安排。螺旋模型迭代模式...原创 2021-05-25 10:32:23 · 370 阅读 · 0 评论 -
访问者模式
访问者模式(Visitor):表示一个作用于某个对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。#include "ObjectStructure.h"#include <iostream>#include <cstdlib>int main(){ ObjectStructure o; o.Attach(new Man()); o.Attach(new Woman()); Success v1原创 2021-05-09 22:24:24 · 99 阅读 · 0 评论 -
解释器模式
解释器模式(interpreter):给定一个语言,定义它的方法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单的语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决问该问题。解释器模式应用 当有一个语言需要解释执行,并且你可以将该语言中的名子表示为一个抽象语法树时,可以使用解释器模式。 解释器模式下,可以容易改变和扩展方法,因为该模式使用类来表示方法规则,可使用继承来原创 2021-05-09 21:09:11 · 91 阅读 · 0 评论 -
享元模式
享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。FlyweightFactory:一个享元工厂,且来创建并管理Flyweight对象,它主要是用来确保合理地共享Flyweight,当用户请求一个Flyweight时,FlyweightFactory对象提供一个己创建的实例或者创建一个(如果不存在的话)UnsharedConcreteFlyweight:用来解决那些不需要共享对象的问题。内部状态与外部状态 在序设计中,有时需要生成大量的细粒度的类实例来表示数据。可以原创 2021-05-09 19:39:16 · 78 阅读 · 0 评论 -
中介者模式
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。原创 2021-05-09 16:43:19 · 79 阅读 · 0 评论 -
职责链模式
职责链模式(China of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。ConcreteHandler# 具体处理者类,处理它所其负责的请求,可访问它的后继者,如果可处理该请求就处理之,否则就将该请求转发至它的后继者。优点 客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它。 接收者和发送者都没有对方的明确信息,且链中的原创 2021-05-09 13:18:19 · 87 阅读 · 0 评论 -
命令模式
命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。Receiver类,知道如何实施一个与请求相关的操作,任何类都可以成为一个接收者。ConcreteCommand类,将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现Execute优点能较容易地设计一个命令队列;在需要的情况下,可以较容易地将命记入日志;允许接收请求的一方决定是否要否决请求;可以容易地实现对请求的撤销和重做;由于加入新原创 2021-05-09 10:42:24 · 61 阅读 · 0 评论 -
桥接 模式
桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。抽象类和它的派生类用来实现自己的对象。将各实现结构独立出来,让它们各自独立地变化。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。#include <iostream>#include <HandsetBrand.h>#include <HandsetBrandM.h>#include <HandsetBra原创 2021-05-08 22:57:43 · 122 阅读 · 0 评论 -
单例模式 及 线程安全
文章目录多线程时的单例双重锁定饿汉式单例懒汉式单例使用内部类析构使用智能指针实现单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以让一个全局变量使得一个对象访问,但它不能防止你实例化多个对象。 一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。构造方法让其private,堵死了外界利用new创建此类的实例的可能。多线程时的单例static Config * Config:原创 2021-05-08 20:57:57 · 219 阅读 · 0 评论 -
迭代器模式
迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 当需要访问一个聚集对象时,而且不管这些对象是什么都需要遍历的时候,可考虑使用迭代器模式,同时可提供多种方式的迭代方式。 迭代器(Iterator)模式就是分离了集合对象的遍历行为,抽象出一个迭代器来负责,这样既可以做到不暴露集合内部结构,又可以让外部代码透明地访问集合内部的数据。#include <iostream>#include "ConcreteAggregate.h原创 2021-05-07 20:14:17 · 63 阅读 · 0 评论 -
StarUML 及9种UML图
文章目录uml图状态图(statechar diagram)活动图(activity diagram)用例图(use case diagram)类图(class diagram)对象图(subject diagram)时序图(sequence diagram)协作图(communication diagram)构件图(component diagram)部署图(deployment diagram)相关操作uml图下面各图的staruml源文件(上传到了github)https://github.com原创 2021-05-07 20:01:37 · 23410 阅读 · 3 评论 -
组合模式
组合模式(Composite):将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。#include <iostream>#include <Composite.h>#include <Leaf.h>using namespace std;int main(){ Composite *root = new Composite("root"); root->Add(new Leaf("Leaf原创 2021-05-06 17:21:19 · 123 阅读 · 0 评论 -
备忘录模式
备忘录(Memento):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先的保存的状态。将要保存的细节给封装在Memento中,需要更改保存细节时则不用在客户端写入详细操作详细细节。Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多的属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。如果一个系统中需要实现命令的撤销功能时,命令模式可以使用备忘录模式来存储可以原创 2021-04-29 17:09:18 · 75 阅读 · 0 评论 -
适配器模式
适配器模式(Adapter):将一个类的接口转化成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以于一起工作。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。适配器模式主要有主要有类适配模式和对象适配模式。使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式。两个类所做的事情相同或相似,但是具有不同的接口时要使用它。需在双方不太容易修改的时候再使用适配器模式适配。#include &原创 2021-04-25 23:50:14 · 68 阅读 · 0 评论 -
状态模式
状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主在是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移至表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。#include <iostream>#include <Work.h>using namespace std;int main(){ Work *emergencyProjects = new Work(); emerg原创 2021-04-23 20:44:10 · 82 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖的接口,而无需指定它们具体的类。IFactory是一个抽象工厂接口,它里面应该包含所有的产品创建的抽象方法。原创 2021-04-21 22:48:07 · 92 阅读 · 0 评论 -
观察者模式 (委托)
观察者模式又叫做发布-订阅(Publish/Subscribe)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。抽象subject依赖于抽象observer将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。当一个对象需要同时改变其他对象的时候,而且他不知道具体有多少对象原创 2021-04-18 23:49:04 · 308 阅读 · 0 评论 -
建造者模式
主要是用于创建一复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象外部的构建通常面临着复杂的变化。其使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品内部表示,只需再定义一个具体的建造者就可以。建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它的装配方式适用的模式。:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。ConcreterBuilder类–具体建造者类。Builder类–抽象建造类。原创 2021-04-17 13:03:41 · 756 阅读 · 0 评论 -
外观模式
外观模式(Facade):为子系统中的一组接口提供一个一至和界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。同样也降低耦合性,例如多层开发架构。提供一个简单的接口,减少因不断重构演化变得相对复杂的各子系统的之间的依赖,在维护旧系统时,同样也可设立Facade对象,让新系统与Facade对象交互,Facade与遗留代码交互相关复杂的工作。#include <iostream>#include <Facade.h>using namespace std;原创 2021-04-16 10:15:58 · 99 阅读 · 0 评论 -
模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。#include <iostream>#include <AbstractClass.h>#include <ConcreteClassA.h>#include <ConcreteClassB.h>using namespace std;int main(){ AbstractClass *c;原创 2021-04-14 21:29:23 · 66 阅读 · 0 评论 -
原型模式
原型模式(Prototyhpe):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。浅复制被复制的对象所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍指指向原来的对象输出为Company: HH Name: tomCompany: HH Name: who深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。输出为Company: Ton Name: tomC原创 2021-04-13 12:49:32 · 64 阅读 · 0 评论 -
工厂方法模式
工厂方法模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。原创 2021-04-10 21:06:23 · 152 阅读 · 0 评论 -
代理模式
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问,为程序中访问对象提供一定的间接性。代理模式的应用远程代理:为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同的地址空间的事实(例如在做过程访问时,在本地建立相关文件来解决远程访问的问题)虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象(例如浏览器当中是用代理模式来优化下载)安全代理:用来控制真实对象的访问时的权限,一般用于对象应该有不同的访问权限的时候智能指针 是指当调用真实原创 2021-04-06 21:09:29 · 67 阅读 · 0 评论 -
装饰 模式
装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活 component是定义一个对象接口,可以给这些对象动态地添加职责。 ConcreComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。 Decorator装饰抽象类,继承了Component,从外类来扩展component类的功能,但对于componet来说,是无需知道Decorator的存在的。 ConcreteDecorator是具体的装饰对象,起至给Component添加职责的功..原创 2021-04-02 16:31:43 · 88 阅读 · 0 评论 -
策略模式
策略模式:它定义了算法家族,分别封装起来,让它们之间右以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 策略模式可以和简单工厂模式结合 在context = new Context(new ConcreteStrategyC())中不传入对就的对应策略类的算法对象,而是等价于简单工厂的工厂输入(类似计算器例子中的“运算符”)context = new Context("A"),在context类中实例化具体的策略过程。 优点:不需要客户了解具体的Strategy类,并将具体的策略算法彻底.原创 2021-03-25 23:48:06 · 105 阅读 · 0 评论 -
简单工厂模式
简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 Factory:工厂类,简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创-建产品类的方法可以被外界直接调用,创建所需的产品对象。 IProduct:抽象产品类,简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 Product:具体产品类,是简单工厂.原创 2021-03-23 21:48:56 · 104 阅读 · 0 评论 -
设计模式学习
命令模式 :把命令做为对象来处理,将命令的过程记录下来,就可以方便做撤消与重做桥接模式:应对于一颗继承数太大,则用桥接,类爆炸的问题装饰模式:一样一样往上套东西状态模式:将逻辑关系放到一个独立的类中,方便处理复杂逻辑关系策略模式:对于灵活的选择与替换解释器模式:构建某种自定义语言或序列进行解释,从而产生相就的效果迭代器模式:对一个集合进行管理,从一个集合调取无元素,但不是关心内部结构及排列顺序...原创 2020-10-26 10:41:47 · 233 阅读 · 0 评论