
[随笔分类][20] Analysis & Design
文章平均质量分 83
finemoon
这个作者很懒,什么都没留下…
展开
-
UML 部署图
•如何阅读部署图 阅读基本部署图 上图解释 BS客户端支持IE6亿傻姑娘和FF1.5以上版本,通过Http请求 CS客户端是Windows系统,需要按.net1.1, sw.exe 是客户端程序,通过WebService与服务器通信 服务器是IIS,.Net 1.1 各个组件之间相互依赖,通过ADO.Net 访问数据库 数据库为 Oracle 9i 部署图的主...2009-11-24 13:43:00 · 467 阅读 · 0 评论 -
建造者模式(Bulider)
知识点回顾 1. 将一个复杂对象的构建与他的表示分离(初始多个成员值并返回这个对象),使得同样的构建过程可以创建不同的表示时,使用建造者模式。 2. 使用建造者模式,用户只需要指定建造的类型就可以得到他们,而具体建造的过程和细节不需要知道,他们被封装在具体的建造类中,扩展具体建造类来丰富建造的特例。 3. 指挥者(Director)类,用来控制建造过程,也用它来隔离用户与建造过程的关联,指挥...2009-12-02 13:51:00 · 130 阅读 · 0 评论 -
观察者(发布订阅)模式 与 委托事件
多一些宽容 重点概念 1. 开放封闭原则,修改原有代码就说明不够好,依赖倒转原则,应该让程序依赖抽象不依赖细节。 2.定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。 3. 上图中Subject类,是抽象通知者(主题),一般用一个抽象类或者一个接口实现。他把所有观察者(关注Subje...2009-12-02 17:07:00 · 147 阅读 · 0 评论 -
抽象工厂模式(Abstract Factory)
开闭原则和依赖倒置原则是面向对象设计的重点,编程是一门艺术,大批量的改动,是不好看的做法。 重点概念 1. 工厂方法模式(不是抽象工厂)是定义一个用于创建对象的接口,让子类中实现这个接口的方法中的内容决定实例化那一个类(New 什么类)。 2. 抽象工厂模式提供几个创建类的接口,具体抽象子类利用父类定义的方法创建相关的“产品抽象类型”的一组子类具体实现。 3. 从上图中可以看出,抽象...2009-12-02 22:20:00 · 154 阅读 · 0 评论 -
状态模式(State)
重点概念 1. 方法内容如果过长其实就有可能出了问题。 2. 当一个对象的内在状态改变时通过调用状态类(一个类)中的方法,同事传递自己(this),状态的判断及执行全部移到了这个状态类当中。 3. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。 4. 状态模式的好处是将与特定状态相关的行为局部...2009-12-03 17:53:00 · 146 阅读 · 0 评论 -
适配器模式(Adapter)
适配器模式比较简单常用,他封装不匹配的接口,提供合适的接口。 重要概念 1. 适配器模式,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。 2. 概念:当需要的东西就在面前,却不能使用,而短时间又无法改造它,于是我们就想办法适配它。适配器使一个方法适合另一个方法。 3. 系统的数据和行为都正确,但接口不符时,我们应该考...2009-12-03 22:59:00 · 97 阅读 · 0 评论 -
备忘录模式(Memento)
重点概念 1. 希望把存取状态的细节封装起来,而且最好是封装在外部的类当中,以体现职责分离。 2. 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保持你的状态。 3.要保存的细节给封装在了Memento中,修改备忘录中数据也不会影响客户端。 4.备忘录模式适合功能复杂但需要维护或记录属性历史的类,或者可选的去备份和恢复某一...2009-12-06 10:59:00 · 134 阅读 · 0 评论 -
组合模式(Composite)
重要概念 1. 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 2. 透明方式与安全方式 透明方式:抽象层接口最大化 安全方式:抽象层接口最小化 3.需求中是体现部分和整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。 4. 组合模式的核心技...2009-12-06 15:39:00 · 92 阅读 · 0 评论 -
迭代器模式(Iterator)
C# 中已经实现了迭代器功能, foreach in 和 IEnumerable 和 IEumerator 接口 是为迭代器而准备的。 所以在实用性上已经没有了。 重点概念 1.提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 2.当访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式。 3.遍历的方式可以从头到尾,也可以从尾到头的选择...2009-12-06 16:48:00 · 105 阅读 · 0 评论 -
单例模式(Singleton)
重点概念 1. 所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效。 2. 将构造方法私有化,并提供一个创建自己实例的方法,在方法中去做是否有实例化的判断,判断需要一个自己的静态变量。 3. 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 4. 让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且它可以提供一个访...2009-12-06 19:55:00 · 102 阅读 · 0 评论 -
大型网站性能优化的通用方法
1、HTML静态化其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的...2009-12-10 12:56:00 · 106 阅读 · 0 评论 -
桥接模式(Bridge)与合成/聚合复用原则(CARP)
重要概念 1.合成/聚合复用原则:优先使用对象合成/聚合(UML中的两个菱形关系),而不是类继承。尽量使用合成/聚合,不使用类继承,继承属于强耦合的结构。 2.合成/聚合复用好处:优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。 3. 将抽象部分与它的实现部分分离,使他们都可以独立地...2009-12-13 12:40:00 · 285 阅读 · 0 评论 -
命令模式(Command)
重要概念 1.命令抽象类,也是命令模式的核心理解 2.命令模式能较容易的设计一个命令队列,在需要的情况下,可以容易地将命令计入日志,并允许接收请求的一方可以判断否决掉请求。 3. 可以容易的实现对请求的撤销和重做。 4. 由于加进新的具体命令类不影响其他的类,因此添加新的具体命令类很容易。 5.命令模式把请求一个操作的对象与指导怎么执行的操作的对象通过命令对象分割开. 示例代码 ...2009-12-13 14:16:00 · 141 阅读 · 0 评论 -
职责链模式(Chain of Responsibility)
重要概念 1. 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 2.请求是沿着链条传递到有一个处理点对象负责处理这个请求为止。请求者无需关心谁会处理这个请求。 3. 接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,他们仅需保持一个指...2009-12-13 16:13:00 · 94 阅读 · 0 评论 -
享元模式(Flyweight)
重点概念 1. 这个模式相对简单。享元模式,就是在工厂中包含所要共享的元素实例,多个对象通过发给这个工厂所需要对象的标记,获得同一个实例,这样多个对象的操作只需要一个对象实例即可,看基础代码示例。 2. 内部状态(共享对象)和外部状态(个性化部分)(代码示例见后面网站第三版) 核心意思,是需要改变的内容部分,可以作为参数传递给方法,而对象本身依然是一个。 3. 如果一个应用程...2009-12-13 19:26:00 · 115 阅读 · 0 评论 -
理解软件外包的种类
包项目 包人 包时间2009-12-17 21:11:00 · 146 阅读 · 0 评论 -
解释器模式(Interpreter)
重要概念 1. 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 2. 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题(比如正则表达式)。 3. 定义一组对指定类型内容做参数的操作,每个操作都做出不同的输出。操作出自一个基类...2009-12-20 14:02:00 · 154 阅读 · 0 评论 -
外观模式(Facade)
重点概念回顾 1.为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一个子系统更觉容易使用。 2. 即使不知道外观模式也一定使用过外观模式,他完美的体现了依赖倒置(面向接口编程)原则和迪米特法则(功能松耦合)的思想,十分常用。 3. 外观模式的核心是,通过将分散的功能包含在外观类中,从而提供一致的操作接口,封装实现,起到了松耦合的目的 4. 在设计的初期...2009-12-01 20:41:00 · 91 阅读 · 0 评论 -
迪米特法则(LoD)最少知识原则
重要概念 1.拉米特法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用(尽可能的封闭私有)。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用(如通过调用接口定义)。 2.在类的接口设计上,每一个类都应当尽量降低成员的访问权限,封装好私有成员,不需要被其他类知道的属性或方法就不要公开。 3.迪米特法则其根本思想,是强调了类之间的松耦合,类之间的耦...2009-12-01 17:33:00 · 364 阅读 · 0 评论 -
面向对象的分析和设计(OOAD)
面向对象的分析和设计(Object Oriented Analysis And Design )3个重要的概念 -- 对象、分析、设计 对象 封装(Encapsulation) 公布功能部分内容,隐含内部实现。 松散耦合(Loose coupling) 耦合代表一个系统使用另一个系统功能的深度或依赖程度,依赖程度越大对于修改所带来的维护就会越多,对其他系统的影响越大,通过接口定义...2009-11-25 12:58:00 · 405 阅读 · 0 评论 -
UML 及其作用
UML(Unified Modeling Language,统一建模语言)是一组用于描述OOAD过程的图形化表达方式。 UML为交流面向对象的设计中的需求,行为、体系结构的实现提供了一套综合的表示法。 UML绘制工具,EA 和VSU 2010 UML由9个不同类型的图组成: 用例图:显示了系统的外部可视行为。 用例图描述了系统外的人员和系统的交互动作,以及系统的响应,该类型的图可以用于描...2009-11-25 16:31:00 · 1844 阅读 · 0 评论 -
UML 五步法:轻量级OOAD
这个理论内容源自于我阅读的UML .Net 实战一书,这本书整本都在讲五步法的开发过程,因为他是以.Net 为背景编写的所以我想学习一下他其中的一些应用思想。这本书针对的UML不是2.0 UML 五步法并不是适合于开发复杂系统的全功能的OOAD过程,他没有管理、测试、文档编制和审查功能,UML五步法适合于学习UML的框架过程。 6,7,8,9,10章是细化每一个过程的特定章节。 ...2009-11-26 11:53:00 · 173 阅读 · 0 评论 -
UML中对关系的描述 (二)
UML 中的关系是比较难记的部分,这里我把UML常用的关系做一下总结和简单介绍。 说明: 示例图形是使用 EA 7.5 绘制的。 UML 五种基础关系(类图为例)关联关系关联关系连接元素和实例,用无方向实线连接两个模型元素。关联的两端可以为双方标记角色和多重性现实事物不是孤立存在的,对象与对象之间都存在着一定的关系,比如教师和学生,我们用关联关系表示。 建角...2009-11-28 12:55:00 · 240 阅读 · 0 评论 -
UML 交互图 (顺序图、通信图、鲁棒图、定时图)
•交互与交互图 交互的概念 •一次交互就是指在特定语境中,为了实现某一个目标,而在一组对象之间进行交换的一组消息所表示的行为 消息 UML中的4种交互图 •顺序图:顺序图是一种强调消息时间顺序的交互图,为读者提供了控制流随着时间推移的清晰的可视化轨迹 •通信图:UML 2.0中的通信图实际上就是UML 1中的协作图,它强调的是参加交互的对象的组织,为读者提供了在协作...2009-11-28 18:43:00 · 1369 阅读 · 0 评论 -
UML 交互概述图
•什么是交互概述图 •交互概述图是将活动图和顺序图嫁接在一起的图 •可以看作活动图的变体,它将活动节点进行细化,用一些小的顺序图来表示活动节点内部的对象控制流 •也可以看作顺序图的变体,它用活动图来补充顺序图 •交互概述图在草图中更加适用,先通过活动图对业务流程进行建模,然后对于一些关键的、复杂度并不高的活动节点进行细化,用顺序图来表示它的对象间的控制流 •不要盲目的使用交...2009-11-28 21:37:00 · 753 阅读 · 0 评论 -
简单工厂模式
简单工厂模式是解决了一个灵活通过方法封装 new 对象的操作,也就是解决对象创建问题。下面的计算器实例,演示了通过方法根据条件利用多态的特性建立需要的业务对象执行对象特定的任务。(在这里将全部引用大话设计模式中的例题代码和内容,劳动属于作者。) 书中有一个类图非常好,一目了然的说明类图的含义和标记 12页 计算器示例逻辑组件(现在电脑粘贴乱码,所以粘贴黑白代码)using Sys...2009-11-29 11:02:00 · 92 阅读 · 0 评论 -
策略模式 (Strategy)
策略模式定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。 说明: 1.通过继承抽象策略实现多个具体策略方法处理,在一个类中传递不同的具体实例做为参数,获得不同的对象的算法,封装在同一个方法中,当这个类的实例调用这个封装了算法的方法时,因传入的对象参数的不同,获得的处理结果也不同。 2.通过传入的对象参数获得操作,改变一个方法的不同处理结果。 3....2009-11-29 21:18:00 · 139 阅读 · 0 评论 -
单一职责原则
1. 单一职责,对一个类而言,应该仅有一个引起他变化的原因。 2. 如果一个类承担的职责过度,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完整其他职责的能力,这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 3. 单一职责和单件模式不是一回事,单件模式指要求一个类有且仅有一个实例,并且提供了一个全局的访问点。 4. 单一职责想要告诉我们的是,根据功能...2009-11-30 09:16:00 · 170 阅读 · 0 评论 -
开放-封闭原则(OCP)
1. 不能修改该,但可以扩展的思想就是开闭原则 2. 软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。也就是对扩展开放,对更改关闭 3. 在面对需求的变更却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出先的版本 4. 多扩展,少修改。 5. 开闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来了,我们增加一些类就可...2009-11-30 13:15:00 · 131 阅读 · 0 评论 -
依赖倒转(依赖倒置)原则
1. 抽象不应该依赖细节,细节应该依赖于抽象(接口,抽象类)。 2. 针对接口编程,不要对实现编程。 3. 高层模块不依赖底层模块,两者都应该依赖抽象。 4. 依赖倒置含义在于,相互之间不依赖,除了约定好的接口实现,大家都可以灵活自如,子类实现接口进行“策略工厂”实现,高层模块通过使用接口来实现“开闭依赖倒置”。 5.依赖倒置其实可以说是面向对象设计的标志,用何种方式实现不重要,重要...2009-11-30 15:23:00 · 189 阅读 · 0 评论 -
装饰模式(Decorator)
重点概念 1. 把所需的功能按正确的顺序串联起来进行控制。 2. 动态地给一个对象添加一些额外的职责(功能),就添加功能来说,装饰模式比生成子类更为灵活。 3. 感觉和策略模式很像,但是条件设置方法放在父类的公共方法中被继承,区别装饰模式的重点在于“扩展”两个字,扩展原有功能,而不是动态的选择功能。 4. 装饰模式是利用“装饰者类”中的SetComponent 来设置被扩展对象的。这...2009-11-30 18:32:00 · 115 阅读 · 0 评论 -
代理模式(Proxy)
大话设计模式讲的和连环画一样,还可以接上,作者真用心,看起来很有趣。 重要概念 1. 为其他对象提供一种代理以控制对这个对象的访问,就是为这个对象实例再包装一层。 2.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实,比如WebService。 3.虚拟代理,是根据需要创建开销很大的对象,通过他来存放实例化需要很长时间的真实对象。...2009-11-30 21:55:00 · 97 阅读 · 0 评论 -
工厂方法模式(Factory Method)
重要概念 本章内容围绕简单工厂与工厂方法的比较很好的说明了工厂方法模式。 1.简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除类与具体产品的依赖,且无需修改代码,因为逻辑已经包含在了工厂类当中。 2.工厂方法模式定义一个用于创建对象的接口,让子类决定实例化那一个类。工厂方法使一个类的实例化延迟到子类。 3.实际上封装...2009-12-01 10:57:00 · 102 阅读 · 0 评论 -
原型模式(Prototype)
重要概念回顾 1. 原型模式用原型实例(类中有一个复制自己的方法)指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 2.原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不知道任何创建的细节。 3.对于.Net 在System命名空间中提供了ICloneable 接口,其中有一个唯一的方法就是Clone()。所以只需要实现这个接口就可以完成原型模式了,代替了上图中的Pro...2009-12-01 12:53:00 · 97 阅读 · 0 评论 -
模板方法模式
概念回顾 1. 使用了继承,并肯定了这个继承的意义,就应该要成为子类的模板,所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复。 2. 当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板来处理。 3. 定义一个操作中的算法的骨架,而将其中的一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算...2009-12-01 16:22:00 · 93 阅读 · 0 评论 -
访问者模式(Visitor)
重点概念 1. 双分派:得到执行的操作决定于请求的种类和接收者的类型。 2. 访问者模式据说是GoF最复杂的模式,不过也不是很难理解。 3. 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 4. 适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。 5. 访...2009-12-20 16:13:00 · 124 阅读 · 0 评论