
设计模式
文章平均质量分 67
继续微笑lsj
眼界决定未来
展开
-
设计模式之组合模式(composite)
概述组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。生活中的例子组合模式将对象组合成树形结构以表示"部分-整体"的层次结构。让用户一致地使用单个对象和组合对象。虽然例子抽象一些,但是算术表 达式确实是组合的例子。算术表达式包括操作数、操作符和另一个操转载 2013-06-16 00:03:17 · 1278 阅读 · 0 评论 -
设计模式之代理模式(Proxy)
意图:为其他对象提供一种代理以控制对这个对象的访问。 种类和用途Proxy模式根据种类不同,效果也不尽相同:1、远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。远程代理又叫做大使(Ambassador)。好处是系统可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在。客转载 2013-07-26 00:28:04 · 1311 阅读 · 0 评论 -
设计模式之观察者模式(Observer)
观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。 观察者模式有很多实转载 2013-08-12 23:15:05 · 1036 阅读 · 0 评论 -
设计模式之命令模式(Command)
命令模式(Command)把请求封装成一个对象,使请求能够存储更多的信息拥有更多的能力。命令模式同样能够把请求的发送者和接收者解耦,但它不关心请求将以何种方式被处理。命令模式经常与职责链模式(Chain of Responsibility)和组合模式(Composite)一起使用:职责链模式处理命令模式封装的对象,组合模式可以把简单的命令对象组合成复杂的命令对象。 本文举了一个在饭店原创 2013-08-13 13:22:58 · 1294 阅读 · 0 评论 -
设计模式之模板方法(Template Method)
模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现, 然后声明一些抽象方法来迫使 子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法, 从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻 辑的细节留给具体的子类去实现。 它可以解决的问题是:对一个业务逻辑(算法实现),在不同的对象中有不同的实现细节,但逻辑(算法)的框架转载 2013-08-13 16:38:25 · 1172 阅读 · 0 评论 -
MVC结构
1.什么是设计模式 每一个模式描述了在我们周围不断重复发送的问题以及该问题的解决核心。一个模式有四个基本要素:(1)模式名称;(2)问题,描述了应该在何时使用模式;(3)解决方案,描述了设计的组成部分他们之间的相互关系及各自的职责和协作方式;(4)效果,描述了模式应用的效果以及模式应权衡的问题。2.MCV中的设计模式 类的模型/视图/控制器(Model/Vie原创 2013-09-27 20:41:24 · 1531 阅读 · 0 评论 -
设计模式之解释器模式(Interpreter)
如果一个特定类型的问题发生频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的例子。这样就可以创建一个解释器,该解释器通过解释这些例子来解决该问题。代码[cpp] view plaincopy// Interpert.cpp : Defines the entry poin转载 2013-08-13 08:26:01 · 975 阅读 · 0 评论 -
设计模式之访问者模式(Vistor)
一. 访问者模式定义:表示一个作用于某对象结构中的各元素的操作。它你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。结构如下:二. 举例假设有一项科学实验,是用来对比两种种子在不同环境下的生长情况。两种种子,一种是普通的种子(Seed_A),一种是太空运回的种子(Seed_B)。生长环境,分别是在多雨环境下(Rain_Statu转载 2013-08-13 09:40:21 · 1163 阅读 · 0 评论 -
设计模式之工厂方法模式(Factory Method)
简单工厂模式,又称为静态工厂方法模式(staticfactory method),除了单件模式之外,大约是23种Gof归纳的常见模式之中最简单的一种了。简单的讲,它就是用工厂类的一个静态方法来创建对象。这样,我们可以做到利用工厂类的静态方法统一管理对象的创建。 静态方法根据传入的字符串参数决定创建哪一个具体的对象,这样,客户端只需要知需要告诉工厂,它需要什么对象,工厂就会根据客转载 2013-08-13 08:54:59 · 1442 阅读 · 0 评论 -
设计模式之享元模式(FlyWeight)
概述想想我们编辑文档用的wps,文档里文字很多都是重复的,我们不可能为每一个出现的汉字都创建独立的空间,这样代价太大,最好的办法就是共享其中相同的部分,使得需要创建的对象降到最小,这个就是享元模式的核心,即运用共享技术有效地支持大量细粒度的对象。享元对象能做到共享的关键是区分内蕴状态(Internal State)和外蕴状态(External State)。内蕴状态是存储在转载 2013-08-13 09:16:16 · 1280 阅读 · 0 评论 -
基于组件的游戏编程 CBSE(Componnet Based Software Engineering)
在传统OO编程中.区别于其他语言最大的亮点在于继承.这是一把双刃剑.优点:将数据与逻辑组织的更紧密.更进一步的强化了代码与现实的对应关系.缺点:当继承树达到一定规模后.要改某个节点的功能将会很麻烦,我以游戏举例.因为游戏里的类创造性很大.变化也很大.看下面类图.这种设计很常见.GameNode里有最基本的属性.比如postion x, y. scale 等等,然转载 2013-10-30 23:41:51 · 1795 阅读 · 0 评论 -
设计模式之职责链模式(Chain of Responsibility)
转自:waringgh意图:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 举例:辛辛苦苦了工作了一年,终于可以加薪了,向主管提交了加薪申请,主管一看不得了,自己职权不够,批不了,主管把申请上交总监,总监发现自己也批不了,申请到了总经理手中,总经理一看,小伙转载 2013-07-25 23:51:13 · 1187 阅读 · 0 评论 -
设计模式之原型模式(Prototype)
其实个人觉得原型模式在C++也就那样吧。反正设计一个类,如果有需要都会重载=或者设置深拷贝函数。所以就简单写一下吧。示意图,UML还是不太会代码:[cpp] view plaincopy#include "stdafx.h" #include #include转载 2013-07-05 16:06:45 · 1261 阅读 · 0 评论 -
设计模式之中介者模式(Mediator)
一、初识中介者模式那些年,我们一起上过的大学,班级里有班长,有团书记。想一想如果没有QQ这种通讯工具的话,那么班长或者团支书该怎样下达消息呢??同时,班级上两个同学之间也可惜沟通啊,沟通一下,院里哪个女生,哪个帅哥呀~~~如果没有QQ的话,大概就是下面的情景:哎呀呀,看看这个乱那。如果同学的数目多起来就会变成网状的结构啦。原本把一个系统分割成一些对象是可以增强复用性的,但是转载 2013-06-19 11:14:44 · 1345 阅读 · 0 评论 -
设计模式之装饰模式(Decorator)
动态的给一个对象额外添加一些额外职责。参与者: Component:定义对象接口,可以给这些对象动态的添加职责。 ConcreteComponent:定义一个对象,可以给这个对象添加职责。 Decorator:维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。原创 2013-06-11 23:50:52 · 1406 阅读 · 0 评论 -
UML类图几种关系的总结
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Generalization) 【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特转载 2013-06-18 13:41:21 · 988 阅读 · 0 评论 -
设计模式之抽象工厂模式(Abstract Factory)
1.简单实现 简单工厂模式生活例子 吃饭。 如果你想吃饭了,怎么办自己做吗?自己做就相当于程序中直接使用new。当然是自己下个指令,别人来做更爽。那就把做饭的任务交给你的老婆吧,那么她就是 一个做饭的工厂了,你告诉她要要吃红烧肉,等会她就从厨房给你端出来一盘香喷喷的红烧肉了,再来个清蒸鱼吧,大鱼大肉不能太多,那就再来个爆炒空心菜,最 后再来个西红柿鸡蛋汤。下图 1) 就是这个转载 2013-06-22 15:21:51 · 1568 阅读 · 0 评论 -
设计模式之备忘录模式(Memento)
生活中大家可能都幻想过如果当初我没怎么样怎么样就好了,当产生这样的想法的时候一定是发生什么不如意的事。生活是现实的,时间也永远不会回到做错事之前的一刹那。软件虽服务于生活,模拟生活却也和生活有所不同,应用软件时,我们可以比较容易的进行备忘,比如编辑word或者txt时,我们使用的快捷键ctrl+z。还有我们可能也对系统进行过备份吧~~~1.初识备忘录模式实际上在软件中备忘录模式的使转载 2013-06-23 10:55:57 · 1075 阅读 · 0 评论 -
设计模式之外观模式(Facade)
这次不先说例子了,先看看一看外观模式的定义吧:外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是外观模式的作用转载 2013-06-23 13:54:21 · 1059 阅读 · 0 评论 -
设计模式之状态模式(State)
State模式的意图有2点:1. 分散逻辑判断和处理。对于State来说,无非就是状态的切换。说白了最终结果和switch/case差不多。对于少量的状态判断和逻辑处理,switch还行。但是对于一个较大的项目而且条件判断比较复杂,这个时候switch不仅效率低下,而且无法控制。State模式巧妙的将逻辑判断和处理放到状态对象中,而不是把条件判断和状态切换放在Context上下文中转载 2013-07-05 19:28:59 · 1301 阅读 · 0 评论 -
设计模式之策略模式(Strategy)
昨天累的要死,晚上还头痛好长时间,今早起来,八点多到自习室,完成昨天没完事的设计模式“策略模式”的研究。1.初识策略模式首先还是看看定义吧:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换,策略模式让算法独立于使用它的客户而独立变化。策略模式包括以下几个部分的内容:(1)—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。(2转载 2013-07-05 18:04:25 · 1100 阅读 · 0 评论 -
设计模式之桥接模式(Bridge)
一、初识桥接模式对于电脑大家是在熟悉不过,看看大家的电脑,有dell的,有lenovo的。比如我的电脑室dell的,但是第一次装系统的时候用的是xp的系统,后来出 win7 了,于是我兴高采烈的装了一个win7旗舰版。关于电脑的分类的结构图大概是这样的。我们知道,电脑品牌多了去了,比如Acer,HP等等,系统也不只是XP和Win7,还有Linux和Unix等等啊,这样一来电转载 2013-06-18 15:14:55 · 1169 阅读 · 0 评论 -
设计模式之适配器模式(Adapter)
我想要是说适配器模式,提一下“电压”、“耳机”、“充电器”和 "USB” 的例子应该是比较恰当的了。就说说自己的亲身经历,我原来的手机是NOKIA5730。后来也不知道有没有国行,但是不推荐大家买这款手机,不适用的哈。我买的时候只有港货,可是大家知道的啊,香港的充电器和我们大陆的充电器规格是不一样的,那我要是在国内充电,原机带的充电器根本用不了,所以要花25RMB买一个公牛的适配器,这样才可以充转载 2013-06-19 21:28:16 · 1022 阅读 · 0 评论 -
设计模式之建造者模式(Builder)
一个人活到70岁以上,都会经历这样的几个阶段:婴儿,少年,青年,中年,老年。并且每个人在各个阶段肯定是不一样的呀,我觉得可以说世界上不存在两个人在人生的这5个阶段的生活完全一样,但是活到70岁以上的人,都经历了这几个阶段是肯定的。实际上这是一个比较经典的建造者模式的例子了。1.初识建造者模式建造者模式实际上是常用的设计模式。顾名思义,builder的意思是建造者或者建筑工人,谈到建转载 2013-06-22 12:53:13 · 1586 阅读 · 1 评论 -
C++反射机制的实现
Published on 2012 年 2 月 28 日, by Eddy in C/C++, iOS技术.前几天用C++为《捕鱼达人》移植UI编辑器的时候,遇到了几个难点。一个是通过类名的字符串创建相应的类的实例化。还有一个是通过属性的名字字符串来操作相应的类的属性。用支持反射的Objective-C或者Java语言来实现类似功能是非常简单的。但是C++不支持,纠结了几天,终于实转载 2015-11-07 13:41:19 · 618 阅读 · 0 评论