软件设计及UML
文章平均质量分 90
G机器猫
致力于软件技术研发.
展开
-
UML - 类图几种关系
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Generalization) 【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。转载 2013-03-12 16:17:12 · 883 阅读 · 0 评论 -
设计模式 - 迭代器模式
UML说明迭代器是用来遍历容器的,STL中运用了大量的迭代器。迭代器最重要的作用有两个,一个是隐藏了容器中的对象,你可能无法知道容器中某个对象的内存地址、具体内容;另一个是能够遍历容器。通过这两点,容器中的对象是非常抽象的,这有利于利用通用的接口控制这些对象。原创 2013-06-07 16:24:27 · 669 阅读 · 0 评论 -
设计模式 - 建造者模式、解释器模式、模板模式
说明首先乍一看模板模式和其他两个一点也不相关,但是据我分析,建造者模式其实算是一个模板模式,模板模式就是通过抽象基类制定业务逻辑,继承类来实现具体,建造者模式其实也是基类制定要生产商品的步骤,继承者根据要生产的产品进行具体的建造,所以建造者模式就是运用了模板模式,其实从这里也可以看出,模式主要提供的设计理念,有些理念虽然描述上不一样,但是根本上确实一致的。另外建造者模式和解释器模式对比,我原创 2013-06-07 16:49:37 · 988 阅读 · 0 评论 -
设计模式 - 访问者模式
UML说明这样的模式用例子解释更好理解,《大话设计模式》上举出的例子是非常好的,讲的是男人和女人在不同状态作出的反应不一样,这样的问题可以有两种设计思路,一种是设置person抽象类,然后男人和女人分别继承person,男人和女人分别对不同反映作出反映,但是如果当增加需要的反映的状态时,男人和女人类都要修改,这就违反了“开放封闭原则”;另一种设计思路是设置一个状态抽象类,该状态抽象原创 2013-06-07 17:10:02 · 1016 阅读 · 0 评论 -
设计模式 - 适配器模式、外观模式
相似点及区别适配器和外观模式都将现存系统转换为可以被其他模块使用的系统,都有移植的意思。但是两者也有区别,一般情况下,适配器模式是通过对一个现存系统增加一层适配层达到其他模块可以使用,而外观模式是将多个现存系统经过再封装使其他模块可以使用,所以我们也可以看出,适配器可以算是外观模式的一个特例。以下分别介绍适配器和外观。适配器适配器模式在移植代码时用得非常多,因为原始代码的接口可原创 2013-03-14 18:34:12 · 864 阅读 · 0 评论 -
设计模式 - 备忘录模式
UML说明这个特别适用于需要时常记录对象某些参数。这个模式是非常简单的模式,也比较好理解,在这就不过多说明了。优化以下是我自己的个人分析:但是上面的UML有个弊端,就是使用者要同时管理这三个类,在一些比较简单的情况下,这样会增大用户的使用难度。其实可以让Originator自己管理备忘录,不需要外界的Caretaker进行管理,这样应用起来会更方便。即O原创 2013-06-07 16:14:31 · 828 阅读 · 0 评论 -
经典软件设计模型 - 生产者消费者模型
简介这里就不具体介绍了,网上一堆关于生产者消费者模式的介绍,这是一个常用的设计方法,只要牵扯多个线程之间协作一般就需要这个设计方法,简单意思就是有个缓冲负责两个线程之间的交流,一个线程往缓冲区写数据,一个线程从缓冲区读数据。缓冲区类型队列缓冲区:缓冲区一般是一个list,每次要写的数据都是新建一块内存,然后将这个内存指针压入队列,读缓冲区就是从队列尾读取,处理完后,将内存释放;原创 2013-06-13 23:23:29 · 1893 阅读 · 0 评论 -
经典软件设计模型 - 插件模型
介绍什么是插件方法,就是将某些模块以插件的方式添加到现有系统中来完成某个具体功能,由于这个具体功能可以由很多不同的模块完成,而每次一般只需要其中一个模块,所以必须可以动态更换模块。这在linux驱动程序中使用很多,如摄像头驱动有一个总的模块接口v4l2,而根据不同的摄像头需要动态注册不同的驱动程序,这些驱动程序就类似插件。在处理这种问题时,很多人可能想到C++的类继承,设置抽象基类定义接口,然原创 2013-06-14 13:17:24 · 2510 阅读 · 0 评论 -
经典软件设计模型 - 事件驱动模型
模型说明在UI编程中,常常要对鼠标点击进行相应,首先如何获得鼠标点击呢?方式一:创建一个线程,该线程一直循环检测是否有鼠标点击,那么这个方式有以下几个缺点:1. CPU资源浪费,可能鼠标点击的频率非常小,但是扫描线程还是会一直循环检测,这会造成很多的CPU资源浪费;如果扫描鼠标点击的接口是阻塞的呢?2. 如果是堵塞的,又会出现下面这样的问题,如果我们不但要扫描鼠标点击,还要扫描键盘原创 2013-06-27 15:06:38 · 33516 阅读 · 4 评论 -
经典软件设计模型 - MVC
原文:http://gaoyong.diandian.com/post/2011-11-02/6443926zhe转载 2014-06-23 14:52:13 · 3858 阅读 · 0 评论 -
设计模式 - 代理模式、桥接模式、中介者模式、命令模式
相似点开始的时候,这四个模式在名字上的意思有相似的地方,在实际生活中,如房屋中介、买房人、卖房人,房屋中介当然是一个中介,因为它负责买房人和卖房人之间的沟通;房屋中介也是一个代理,它在卖房人面前是买房人的代理,在卖房人面前时买房人的代理;房屋中介也是一个桥接,用于连接买房人和卖房人;房屋中介也可以是命令的传达者,买房人将买房的命令发送给中介,中介根据命令找到相应的卖房人。那这字面意思相似的四者原创 2013-05-16 22:50:27 · 5025 阅读 · 2 评论 -
设计模式 - 单例模式、享元模式
相似及区别单例模式和享元模式都是数据共用的意思,及大家共用某个东西,只是单例是大家共用一个东西,而享元是共用多个东西,当然享元的特例就是单例(但是实现时有很大的区别)。享元UML享元案例享元使用得场合并不多,一个很经典的用法就是《大话设计模式》上提到的一个,.NET里面的string使用享元模式,如果string A = “123”, string B =原创 2013-06-05 18:48:26 · 2727 阅读 · 0 评论 -
设计模式 - 观察者模式
用途这个模式用的场合还是很多,如消息、状态通知,当事件A发生时,它就通知某个观察者(监听者),观察者接到消息后,再做后续处理。优点我们可以用另外一个方法实现上面的功能,让观察者实时查询事件A是否发生,如果发生了就处理,如果没有发生就接着查询。这样首先就是资源占用会比较多;第二安全性都不好,因为如果有两个观察者同时观察一个事件A,那么这首先就有两个线程同时调用事件A的一个接口,这原创 2013-03-13 21:20:24 · 1160 阅读 · 0 评论 -
设计模式 - 单例模式
在程序中,类的对象只有一个,这在实际中经常用到,如某个服务、某个单一的资源等,都需要单例模式。类图懒汉模式即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.使用double-check来保证thread safety.转载 2013-03-14 18:12:55 · 771 阅读 · 0 评论 -
设计模式 - 简单工厂、工厂方法、抽象工厂
UML类图简单工厂简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。工厂方法工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。抽象工厂抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要转载 2013-03-12 15:56:07 · 1087 阅读 · 0 评论 -
设计模式 - 策略模式
UML图Context封闭了Strategy,外界使用需要调用Context的接口SetStrategy设置需要调用的接口代号(不是Strategy类对象)。策略模式和简单工厂模式区别在代码形式上两者很相似,而且描述基本也一样。两者的区别主要是简单工厂模式创建的是对象,而策略模式创建的是算法。我认为基本上两者是一样的。原创 2013-04-18 16:25:14 · 684 阅读 · 1 评论 -
设计模式 - 装饰模式
装饰模式和类继承很容易混淆,在后面会进行分析。UML图装饰模式和简单类继承区别Component是被装饰的类,Decorator是装饰类,Decorator继承于Component,Decorator是Component的子类。装饰模式和简单类继承的区别是,简单继承的子类会对基类的方法进行重写,而装饰模式虽然对基类的方法进行重写,但是在方法内还会调用基类相应原创 2013-04-20 21:22:32 · 915 阅读 · 0 评论 -
设计模式 - 设计原则
单一职责原则该原则是比较好容易理解的原则,即让一个类的功能单一化、简单化。大的功能有很多个小功能的类组合而成。功能单一的类比较容易维护,而且功能因为简单而更稳定。开放封闭原则“扩展开放、修改封闭”。即写成的类发布后,尽量少修改。当因为业务需求需要修改功能时,首先考虑是功能扩展,而不是修改原有功能,因为经常修改既有稳定功能很有可能产生新的bug。那么如何才能支持扩展呢?其原创 2013-04-18 16:12:18 · 628 阅读 · 0 评论 -
设计模式 - 组合模式
UML图使用场合当整体和部分有很多相似的时候,就可能能用到组合模式。二叉树就具有这样的特点,我们在写二叉树时,表示二叉树的不是树,而是一个根节点,二叉树和节点有很多相似的地方,二叉树有左右两个子树,节点也有左右两个孩子。所以如上UML图,节点类是Component,二叉树则是Comosite。二叉树继承自节点,然而二叉树又由很多节点组成。如果场合存在递归特点,就要考虑是原创 2013-05-02 21:42:31 · 1143 阅读 · 0 评论 -
设计模式 - 状态模式、职责链模式
UML状态模式职责链模式区别我一直无法分析出两者真正的区别是什么,两者确实非常相似,他俩都代表着转移,甚至同一个问题都可以由两者分别完成。所以,我在网上搜了一个分析两者区别的文章,如下:职责链模式:当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHander对象负责处理它。接收者和发送者都没有对方的明确信息,且链原创 2013-06-07 12:36:04 · 1372 阅读 · 0 评论 -
设计模式 - 装饰模式、原型模式、模板模式、享元模式
相似点这几个从名字上都看出有复用的意思,装饰模式:通过对A装饰获得B,B拥有A的功能;原型模型:通过clone A获得B,B也有A的功能;模板模式:B通过继承A,B拥有A的功能;享元模式:其实享元模式不应该和其他三个在一起比较,因为其他三个倾向于复用,而享元倾向于共用;享元将和单例进行比较;下面我们将分析装饰模式、原型模式、模板模式进行比较。UML原创 2013-05-15 21:58:56 · 2398 阅读 · 0 评论 -
应用软件设计模型 - 日志组件设计方案
原文:http://www.oecp.cn/hi/yongtree/blog/127转载 2014-07-16 13:38:03 · 4246 阅读 · 0 评论