模式架构
文章平均质量分 84
ouyangshima
找到心中的那份自信
技术不牢,地动山摇
展开
-
[框架]PureMVC--Facade/通知源码
FaçadeMVC 元设计模式的核心元素在 PureMVC 中体现为 Model 类、View 类和Controller 类。为了简化程序开发,PureMVC 应用了 Façade 模式。Façade 是 Model、View 和 Controller 三者的“经纪人”。实际编写代码时你并不用导入这三者的类文件,也不用直接使用它们。Façade 类已经在构造方法包含了对核心 MVC 三者单例的构造。一般地,实际的应用程序都有一个 Façade 子类,这个 Façade 类对象负责初始化 Cont原创 2020-12-01 23:57:26 · 841 阅读 · 0 评论 -
[框架]PureMVC--核心层源码
Model层说明Model保存对Proxy对象的引用,Proxy负责操作数据模型,与远程服务通信存取数据。这样保证了Model层的可移植性。module puremvc { //Model的作用就是保存proxy对象的引用 export class Model implements IModel { proxyMap: Object = null; constructor() { if (Model.instance)原创 2020-12-01 23:04:57 · 828 阅读 · 0 评论 -
[框架]PureMVC简介
分层将一个复杂的程序进行层次划分。为每一层进行设计,每层都是内聚的而且只依赖与它的下层。采用标准的架构模式来完成与上层的松散关联。将所有与领域模型相关的代码都集中在一层,并且将它与用户界面层、应用层和基础结构层的代码分离。领域对象可以将重点放在表达领域模型上,不需要关心它们自己的显示、存储和管理应用任务等内容。这样使模型发展得足够丰富和清晰,足以抓住本质的业务知识并实现它。MVCMVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller原创 2020-11-30 23:58:32 · 1331 阅读 · 0 评论 -
[架构]MVC/MCP/MVVM三个框架模式
MVC框架模式MVC是一种框架模式而非设计模式,GOF把MVC看作是3种设计模式:观察者模式、策略模式与组合模式的合体,而核心是观察者模式。MVC框架模式图角色说明模式说明当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上,这就是MVC的工作原理。M...原创 2020-03-23 17:29:40 · 2792 阅读 · 1 评论 -
[架构]接口行为的扩展
接口行为的扩展,经常面临这样的问题,之前已经定义好一个接口,且该接口已经在很多地方使用到,现在我们想让新增新方法。如下图所示,已经定义了接口IVedioMedia,已经有RM和Mpeg实现了它。现在如果在IVedioMedia接口中新增resize()方法,那么就要连同RM和Mpeg一同修改,这已经违反了open-close原则,即在添加新功能的同时,不修改原有的、已经存在的代码。这时候我们应...原创 2019-12-24 18:30:05 · 357 阅读 · 0 评论 -
[基础概念]这次,彻底弄懂接口及抽象类
抽象类及其作用抽象类,顾名思义,即类的抽象。在介绍面向对象概念时,我们知道类是客观事物的抽象,而抽象类又是类的进一步抽象,该怎么理解呢?举个例子,我们定义若干个类 class BMW、class Benz、class Audi,分别对客观事物“宝马”、“奔驰”、“奥迪”三种汽车进行抽象,包含相关属性和行为(即方法)。但是我们知道,汽车都有通用的属性和行为,比如品牌、发动机、方向盘、轮胎...原创 2019-12-24 18:00:55 · 387 阅读 · 0 评论 -
[设计模式]装饰、组合、职责链模式
模式介绍装饰模式:相当于是叠罗汉,将多个行为有序的串联起来,最终得到结果。(通过下一个行为装饰上一个行为) 组合模式:使得用户对单个对象和组合对象的使用具有一致性 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。使用场景适用于一些有关联关系的类,进行互相调用。装饰模式D...原创 2019-12-22 18:28:05 · 553 阅读 · 0 评论 -
[设计模式]一两句话的设计模式
创建型速记口诀: 单抽工建原单例:只需一个实例时考虑。要么没有,要么只有一个。 工厂方法:在允许不修改工厂类的前提下添加新类。 抽象工厂:当工厂方法无法满足多系列问题时,再重构为抽象工厂。提供相关性接口,无需具体指定 建造者:多个部件的建造实现相同,只是所需部件、建造顺序不同时考虑。构建与表示分离。 原型:在初始化信息不发生变化时考虑。重复利用现有实例的拷贝。结构型速记口诀:...原创 2019-12-21 18:32:01 · 364 阅读 · 0 评论 -
[设计模式]Observer观察者模式
问题Observer模式应该可以说是应用最多,影响最广的模式之一,因为Observer的一个实例Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦。在MFC中,Doc/View(文档视图结构)提供了实现MVC的框架结构。还有在事件处理系统中也经常用到,事件分发机制就是采用的观察者模式。观察者模式是实现解耦的一种方法,...原创 2012-12-29 19:19:14 · 2661 阅读 · 1 评论 -
[架构]消息机制
排队打饭的情景相信曾经是学生的你一定经历过,像极了消息机制的原理,也许发明消息机制的灵感就是原来于这样的生活吧!排队的学生就是消息队列,值日生分发饭菜就是消息循环并完成消息处理,学生吃饭就类似于事件处理。什么是消息?何为消息?消息就是带有某种信息的信号,如你用鼠标点击一个窗口会产生鼠标的消息,键盘输入字符会产生键盘的消息,一个窗口大小的改变也会产生消息。消息从何而来?根据冯·诺依曼的体...原创 2017-11-07 00:07:22 · 3522 阅读 · 0 评论 -
[架构]事件机制--典型观察者模式
程序设计的正确标准是松耦合,高内聚. 而观察者模式恰恰给松耦合提供了便利条件. CustomEvent又是对事件的高度封装.是用户能够自定义自己的事件. 从而达到更好的松耦合.简单的自定义事件:function EventTarget() { this._listeners = {};};EventTarget.prototype = { constructor: Ev...原创 2017-10-26 23:41:37 · 630 阅读 · 0 评论 -
[设计模式]设计模式总结
引言设计模式是软件工程的基石。只有精通了设计模式,才敢说真正理解了软件工程。可以说,设计模式是每一个架构师所必备的技能之一。设计模式的起源是面向对象程序设计思想,而面向对象设计的精髓是——抽象。面向对象通过类和对象来实现抽象,实现时产生了面向对象的三个重要机制:封装,继承,多态。正是这三个机制衍生出了各种各样的设计模式。面向对象系统的分析和设计实际上追求的就是两点,一是高内聚,二是低耦...原创 2013-01-14 01:12:06 · 2135 阅读 · 7 评论 -
[设计模式]Proactor前摄器模式和Reactor反应器模式
顶/二级域名分配顶/二级域名 使用组织com 商业机构edu教育结构 gov 行政部门 int 国际组织 mil/ac 军事/科研结构 net 网络支持中心原创 2010-03-16 12:30:00 · 1622 阅读 · 0 评论 -
[架构]概念--MVC模式
MVC模式,即模型-视图-控制器(MVC,Model-View-Control)是一种交互界面的结构组织模型。 MVC的理念是为了将数据模型和视图层分离开来。其实MVC是一种框架模式,而非设计模式。MVC的是为了把数据(Model)和视图(View)分离开来,然后用控制器(Controller)来粘合M和V之间的关系。模型-视图-控制器(MVC模式)是一种非常经典的软件架构模式,在UI框架和UI...原创 2010-10-17 22:47:00 · 743 阅读 · 0 评论 -
[架构]我的MVC使用
在整个 GUI 编程领域,MVC模式是GUI界面开发的指导模式,基于表现层分离的思想把程序分为三大部分:Model-View-Controller,呈三角形结构。Model是指数据以及应用程序逻辑,View是指 Model的视图,也就是用户界面。这两者都很好理解,关键点在于Controller的角色以及三者之间的关系。MVC 已经拥有将近 50 年的历史了。早在几十年前,Smalltalk-76 ...原创 2019-02-26 17:49:24 · 357 阅读 · 0 评论 -
[设计模式]设计模式SOLID原则
在程序设计领域, SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖倒置)是由罗伯特·C·马丁在21世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时...原创 2010-04-16 13:56:00 · 1113 阅读 · 0 评论 -
[设计模式]设计模式之依赖倒置原则
依赖倒置—依赖注入,控制反转**如果一个类A的功能实现需要借助于类B,那么就称类B是类A的依赖,如果在类A的内部去实例化类B,那么两者之间会出现较高的耦合,一旦类B出现了问题,类A也需要进行改造,如果这样的情况较多,每个类之间都有很多依赖,那么就会出现牵一发而动全身的情况,程序会极难维护,并且很容易出现问题。要解决这个问题,就要把A类对B类的控制权抽离出来,交给一个第三方去做,把控制...原创 2019-06-15 12:41:56 · 503 阅读 · 0 评论 -
[设计模式]Strategy策略模式(二)
策略模式定义是:定义算法族,分别封装起来,让它们之间可以互相替换,算法的变化独立于使用算法的客户。我们来模拟一种情形来理解这句话。有一群鸭子,有各种颜色的鸭,他们有的会飞,有的不会飞,飞的姿态也更不相同。此时如果在每只鸭子里分别定义飞的姿态,那有成千上万中鸭子的时候就会累死。这时我们考虑使用设计模式来实现下它。设计原则中第一条:找出应用中可能需要变化之处,把它们独立出来。当然这里我们独立的就...原创 2019-06-17 22:41:06 · 231 阅读 · 0 评论 -
[基础概念]UML类之间的关系
类之间的关系类间关系有很多种,在大的类别上可以分为两种:纵向关系,横向关系。纵向关系就是继承关系。横向关系按照UML的建议大体可以分为四种: UML表示法 关系 依赖(Dependency) 虚线+箭头(--->) ...use a...用(为函数中的参数)...原创 2019-09-27 15:12:50 · 3384 阅读 · 0 评论 -
[设计模式]工厂模式与抽象工厂模式
下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。简单工厂模式简单工厂模式不是 23 种设计模式里的一种,简而言之,就是有一个专门生产某个产品的类。比如下图中的鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标。工厂模式工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。 戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。 生产哪...原创 2019-10-10 18:56:49 · 266 阅读 · 0 评论 -
[设计模式]Bridge桥接模式
Bridge桥接模式桥接模式一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。将抽象部分与它的实现部分分离,使它们都可以独立地变化。优点分离抽象接口及其实现部分。桥接模式使用“对象间的关联关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自维...原创 2013-01-08 20:42:17 · 1488 阅读 · 0 评论 -
[设计模式]Strategy策略模式
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换。对照类图可以看到,策略...原创 2013-01-01 16:27:55 · 1681 阅读 · 0 评论 -
[设计模式]Singleton单例模式——类模板
Singleton模式称作单件模式或单例模式。它的作用是确保一个类在整个工程中有且只有一个实例。可以在多个不同的类中很方便的所需要的类的方法。原理:它的构造函数是私有的,你不能去new它。该单例类里面已经实例化好了一个了,并且是static的,并提供一个获取该实例的方法!客户端只能通过该方法获取这个已经实例化好了的,这样就保证了只有一个实例存在!1. Singleton.h文件/...原创 2012-06-11 11:17:37 · 2986 阅读 · 0 评论 -
[设计模式]Interpreter解释器模式
Interpreter解释器模式通常当一个语言需要解释执行,并且你可以将该语言的句子表示成为一个抽象的语法树时,可以使用解释器模式解析1)context:包含解释器之外的一些全局信息2)AbstractExpression:抽象基类,声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享3)TerminalExpression:终结符类,实现与文法中的终结符相关联的原创 2013-01-11 18:41:37 · 1603 阅读 · 0 评论 -
[设计模式]AbstractFactory抽象工厂模式
问题假设我们要开发一款游戏,当然为了吸引更多的人玩,游戏难度不能太高但是也不能太简单。于是我们就可以采用这样一种处理策略:为游戏设立等级,初级,中级,高级甚至BT级。假设也是过关的游戏,每个关卡都有一些怪物守着,玩家要把这些怪物干掉才可以过关。作为开发者,我们就不得不创建怪物的类,然后初级怪物,中级怪物等都继承怪物类。在每个关卡,我们都要创建怪物的实例,例如初级要创建初级怪物(有很多种类),中...原创 2013-01-10 21:00:09 · 1462 阅读 · 0 评论 -
[设计模式]memento备忘录模式
问题没有人想犯错误,但是没有人能够不犯错误。犯了错误一般只能改过,却很难改正(恢复)。世界上没有后悔药,但是我们在进行软件系统的设计时候是要给用户后悔的权利(实际上可能也是用户要求的权利:)),我们对一些关键性的操作肯定需要提供诸如撤销(Undo)的操作。那这个后悔药就是Memento模式提供的。memento备忘录模式在不暴露对象实现细节的情况下保存和恢复对象之前的状态。Me...原创 2013-01-04 22:43:30 · 1129 阅读 · 0 评论 -
[设计模式]Template模版模式
问题在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template提供了这种情况的一个实现框架。Template模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。template模版模式:很多资料也称Temp...原创 2013-01-01 20:51:28 · 1145 阅读 · 0 评论 -
[设计模式]Visitor访问者模式
问题在面向对象系统的开发和设计过程中,经常会遇到一种情况就是需求变更,经常我们做好的一个设计,实现了一个系统原型,咱们的客户又会有了新的需求。我们又因此不得不去修改已有的设计,最常见的就是解决方案就是给已经设计实现好的类添加新的方法去实现客户的需求,这样就陷入了设计变更的梦魔:不停的打补丁,其带来的后果就是设计根本就不可能封闭,编译永远都是整个系统代码。visitor模式则提供了一种解决方...原创 2013-01-01 18:28:17 · 1545 阅读 · 0 评论 -
[设计模式]Composite组合模式
问题在开发中,我们经常可能要递归构建树状的组合结构。在我们软件系统开发中,会遇到简单对象与复杂对象一起使用的情况,就好比刚刚说的文件目录一样,可以包含文件和文件夹,文件夹下面也可以包含文件和文件夹。但是由于简单对象和复杂对象在功能使用上还是有一定的区别的,可能会造成客户端调用时较为麻烦。这时候就需要将简单对象和复杂对象统一一致对待。然而组合模式也就是解决这一麻烦的。composite组合模...原创 2012-12-31 18:42:56 · 1146 阅读 · 0 评论 -
[设计模式]Flyweight享元模式
问题如果一个应用程序使用了大量的对象,二这些对象造成了很大的存储开销就应该考虑应用享元模式。Flyweight享元模式运用共享技术有效地支持大量细粒度的对象(对于C++来说就是共用一个内存块啦,对象指针指向同一个地方)。FlyweightFactory享元工厂:用来创建并管理Flyweight对象。它主要是用来确保合理地共享Flyweight,当用户请求一个Flyweight时...原创 2012-12-31 21:34:43 · 1328 阅读 · 1 评论 -
[设计模式]ChainOfResponsibility责任链模式
顾名思义,责任链模式是一条链,链上有多个节点,每个节点都有各自的责任。当有输入时,第一个责任节点看自己能否处理该输入,如果可以就处理。如果不能就交由下一个责任节点处理。依次类推,直到最后一个责任节点。问题熟悉VC/MFC的都知道,vc是”基于消息,事件驱动”,消息在vc开发中起着举足轻重的作用。在MFC中,消息是通过一个向上递交的方式进行处理,例如一个WM_Command消息的查出来流程可...原创 2013-01-10 20:09:32 · 2990 阅读 · 0 评论 -
[设计模式]Iterator迭代器模式
问题iterator模式应该是最为熟悉的模式了,最简单的证明就是在实现Composite模式,Flyweight模式,Observer模式中就直接用到了STL提供的Iterator来遍历Vector或者List数据结构。Iterator模式也正是用来解决对一个聚合对象的遍历问题,将对聚合的遍历封装到一个类中进行,这样就避免了暴露这个聚合对象的内部表示的可能。iterator迭代器模式...原创 2013-01-13 19:23:20 · 1210 阅读 · 0 评论 -
[设计模式]Factory工厂模式
Factory工厂模式很多资料也称FactoryMothed(工厂方法)主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。Product:创建出来的对象的抽象基类 Factory:创建对象的工厂方法的抽象基类 Factory::CreateProduct():纯虚函数,由派生类实...原创 2013-01-11 17:34:20 · 1350 阅读 · 0 评论 -
[设计模式]Adapter适配器模式
Adapter适配器模式将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。通俗的说就是,A类想调用B类的方法,只能通过创建适配器的方法来调用;结合代码来说就是,目标类想调用被适配者类的方法,是通过适配者类来调用的。双方都不适合修改的时候,可以考虑使用适配器模式。Adapter模式其实就是把完成同样的一个功能但...原创 2013-01-09 19:17:38 · 1109 阅读 · 0 评论 -
[设计模式]Facade外观模式
问题举一个生活中的小例子,大凡开个学或毕过业的都会体会到这样一种郁闷:你要去n个地方办理n个手续。但是实际上我们需要的就是一个最后一道手续的证明而已,对于前面的手续是怎么办的,到什么地方办理我们都不感兴趣。facade外观模式为子系统的一组接口提供一个一致的界面, 使用户使用起来更加方便。Facade模式在高层提供了一个统一的接口,解耦了系统。设计模式中还有另一种模式Media原创 2013-01-09 20:14:39 · 1730 阅读 · 0 评论 -
[设计模式]Command命令模式
command命令模式Command模式通过将请求封装到一个对象(Command)中,并将请求的接收者存放到具体的ConcreteCommand类中的(reciver)中,从而实现调用操作的对象和操作的具体实现之间的解耦。解析:Command模式的思想是把命令封装在一个类(Command)中,同时把接收对象也封装在一个类(Receive)中,由调用这个命令的类(Invoker)来调用...原创 2013-01-04 21:38:50 · 2355 阅读 · 1 评论 -
[设计模式]Proxy代理模式
proxy代理模式笔者看到这个模式就联想到了代理商。我们客户买东西一般都是经过代理商的,代理商和真正的生成产品的公司进行对接,因为代理商有钱嘛可以搞垄断赚差价嘛。其实在软件设计中的代理模式和我们现实生活中很类似。在设计模式中,我们的代理模式是这样的,客户端并不能直接访问真正的主题对象,只能通过代理对象进行间接的访问,这样我们就可通过代理对象来控制对真实主题对象的访问,可以在访问前后做一些动作,...原创 2013-01-09 19:43:15 · 1387 阅读 · 0 评论 -
[设计模式]Prototype原型模式
prototype原型模式用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 小demoprototype.h#ifndef PROTOTYPE_H#define PROTOTYPE_H// 虚拟基类,所有原型的基类,提供Clone接口函数class Prototype{public: Prototype(){} virtual ~Prot原创 2013-01-09 20:51:05 · 1651 阅读 · 0 评论 -
[设计模式]State状态模式
前言在实际开发中,我们经常会遇到这种情况;一个对象有多种状态,在每一个状态下,都会有不同的行为。那么在代码中我们经常是这样实现的。typedef enum tagState{ state, state1, state2}State;void Action(State actionState){ if (actionState == stat...原创 2013-01-03 18:44:24 · 1199 阅读 · 0 评论 -
[设计模式]Builder建造者模式
builder建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder:这个基类是全部创建过程的抽象,提供构建不同组成部分的接口函数 ConcreteBuilder:是对一个对象不同部分的构建函数接口,Builder的派生类来具体实现。 Director::Construct():这个函数里面通过Builder接口函数完成对象的构建,也就是...原创 2013-01-05 19:17:57 · 1247 阅读 · 0 评论