OOA&OOD
时时处处皆修行
Life is like a box of chocolates.
展开
-
设计模式(1)-对象创建型模式-Singleton模式
Singleton的意图、动机、C++实现、JAVA实现原创 2014-04-17 09:52:43 · 944 阅读 · 0 评论 -
面向对象程序设计的六大原则(5)-依赖倒置原则
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接转载 2014-04-08 18:26:10 · 966 阅读 · 0 评论 -
面向对象程序设计的六原则(6)-迪米特法则
定义:一个对象应该对其他对象保持最少的了解。问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案:尽量降低类与类之间的耦合。 自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。低耦合的优点不言而喻,但是怎么转载 2014-04-08 18:31:34 · 986 阅读 · 0 评论 -
UML在项目实施中的使用心得(需求分析阶段)
与其说是使用心得,不如说是再次研究了UML后,结合10多年的项目经验以及看到的项目所进行的纸上推演。这种推演能够让我对UML在未来项目实施中到底该怎么用、用到什么程度有一个相对更清晰的概念,因此写此文一方面整理思路,一方面也请大虾们指正。原创 2014-04-09 19:42:20 · 5637 阅读 · 1 评论 -
UML在项目实施中的使用心得(概要设计阶段)
UML在项目实施中的使用心得(概要设计阶段)原创 2014-04-10 09:51:58 · 7850 阅读 · 0 评论 -
UML在项目实施中的使用心得(详细设计阶段)
总结:在业务需求分析阶段使用功能框图、Use Case图、Sequence图逐级分析业务项及业务流程,在概要设计阶段确定系统架构,使用Deployment图、Component图确定部署、对外提供接口、内部接口等主要信息, Sequence图、Activity图、StateMachine图细化一些关键流程,这两个阶段UML中的Thing都可以理解为更粗粒度的对象。到了详细设计阶段,除了Use Case图、Deployment图,其他图全部都会用上,且是此时的对象是代码级别的对象。原创 2014-04-10 13:59:31 · 8877 阅读 · 0 评论 -
设计模式(16)-行为型模式-ITERATOR模式
别名:cursor3.4.1功能 学过STL的都知道iterator,无需多言。ü 提供一种方法顺序访问一个聚合对象中各个元素 , 而又不需暴露该对象的内部表示ü 支持对聚合对象的多种遍历ü 为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代) 这一模式的关键思想是将对列表的访问和遍历从列表对象中分离出来原创 2014-06-01 16:27:25 · 617 阅读 · 0 评论 -
设计模式(18)-行为型模式-MEMENTO模式
3.5 MEMENTO模式3.6.1 功能 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 一个备忘录 (memento)是一个对象, 它存储另一个对象在某个瞬间的内部状态,而后者称为备忘录的原发器 ( originator)。只有原原创 2014-06-01 16:35:18 · 830 阅读 · 0 评论 -
设计模式(20)-行为型模式-State模式
3.8.1 功能State模式被用来解决下面列出的两个问题:1)当状态数目不是很多的时候,Switch/Case可能可以搞定。但是当状态数目很多的时候(实际系统中也正是如此),维护一大组的Switch/Case语句将是一件异常困难并且容易出错的事情。2)状态逻辑和动作实现没有分离。在很多的系统实现中,动作的实现代码直接写在状态的逻辑当中。这带来的后果就是系统的扩展性和维护得不到保证。原创 2014-06-01 16:40:56 · 690 阅读 · 0 评论 -
设计模式(22)-行为型模式-Template Method模式
功能 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template提供了这种情况的一个实现框架。 Template模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。原创 2014-06-01 16:47:19 · 833 阅读 · 0 评论 -
设计模式(21)-行为型模式-Strategy模式
别名:Policy3.9.1功能• 许多相关的类仅仅是行为有异。 “策略”提供了一种用多个行为中的一个行为来配置一个类的方法。•一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的S t r a t e g y类中以代替这些条件语句。3.9.2 结构• S t r a t e g y( 策略,如C o m p o s原创 2014-06-01 16:45:05 · 722 阅读 · 0 评论 -
设计模式(14)-行为型模式-command模式
别名:Action或者Transaction1.1.1 功能 Command模式通过将请求封装到一个对象(Command)中,并将请求的接受者(Receiver)存放到具体的ConcreteCommand类中中,从而实现调用操作的对象和操作的具体实现者之间的解耦。1.1.2 结构图与协作关系 备注:我认为这张图应该在client原创 2014-06-01 16:21:25 · 631 阅读 · 0 评论 -
设计模式(15)-行为型模式-INTERPRETER模式
1.1 INTERPRETER模式1.2.1 功能 Interpreter模式描述语法解析器的设计模式。1.2.2 结构图• A b s t r a c t E x p r e s s i o n (抽象表达式,如Re g u l a r E x p r e s s i o n )— 声明一个抽象的解释操作,这个接口为抽象语原创 2014-06-01 16:24:25 · 790 阅读 · 0 评论 -
设计模式(23)-行为型模式-VISITOR模式
3.11.1功能在面向对象系统的开发和设计过程,经常会遇到一种情况就是需求变更(ChangeRequest),经常我们做好的一个设计、实现了一个系统原型,咱们的客户又会有了新的需求。我们又因此不得不去修改已有的设计,最常见就是解决方案就是给已经设计、实现好的类添加新的方法去实现客户新的需求,这样就陷入了设计变更的梦魇:不停地打补丁,其带来的后果就是设计根本就不可能封闭、编译永远都是整个系统代码原创 2014-06-01 16:50:35 · 794 阅读 · 0 评论 -
设计模式(17)-行为型模式-Moderator模式
3.5 Moderator模式3.5.1 功能可以通过将集体行为封装在一个单独的mediator当中来避免不同组件(对象)之间的依赖关系。Mediator负责控制盒协调一组对象间的交互。Mediator是的组中的对象不再相互显式的调用。3.5.2 结构• M e d i a t o r(中介者)— 中介者定义一个接口用于与各同事(C o原创 2014-06-01 16:32:16 · 912 阅读 · 0 评论 -
面向对象程序设计的六大原则(4)- 接口隔离原则
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。举例来说明接口隔离原则:转载 2014-04-08 18:19:07 · 832 阅读 · 0 评论 -
面向对象程序设计的六大原则(2)-开放关闭原则
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。 开闭原则是面原创 2014-04-08 17:15:26 · 1084 阅读 · 0 评论 -
设计模式(2)-对象创建型模式-Factory Method模式
工厂方法模式,c++实现、java实现原创 2014-04-17 11:08:28 · 874 阅读 · 0 评论 -
设计模式(3)-对象创建型模式-Abstract Factory模式
抽象工厂模式,适合场景、C++示例代码、JAVA示例代码原创 2014-04-18 05:46:55 · 1124 阅读 · 0 评论 -
设计模式(6)-结构性模式-Adapter模式
Adaptor模式,一看就懂,不贴例子了.原创 2014-04-19 06:19:05 · 1176 阅读 · 0 评论 -
设计模式(4)-对象创建型模式-Prototype模式
原型模式,C++及JAVA实现.原创 2014-04-18 14:00:36 · 1154 阅读 · 0 评论 -
设计模式(5)-对象创建型模式-Builder模式
Builder模式C++、JAVA代码示例原创 2014-04-18 19:30:42 · 1270 阅读 · 1 评论 -
设计模式(7)-结构型模式-Bridge模式
桥接模式,原理简单,用好不容易.原创 2014-04-19 06:22:07 · 1313 阅读 · 1 评论 -
设计模式(11)-结构型模式-Flyweight模式
2.6 FLYWEIGHT2.6.1 功能 看到Flyweight想起来线程叫做lightweight进程: Lightweight:a fighter who is in a class of boxers weighing from 125 to 132 pounds (57 to 60kilograms)原创 2014-04-21 11:45:21 · 617 阅读 · 0 评论 -
设计模式(9)-结构型模式-Decorator模式
2.4 Decorator模式2.4.1 功能 装饰模式又名包装(Wrapper)模式,装饰模式以对客户透明的方式动态的给一个对象附加上更多的责任。 这个模式有意思的地方在于:在基类可以出现的任何地方都可以有“装饰”。 怎么做到对客户透明呢?其实GoF的例子还是非常有代表性的,比网上的代码例子都更有说服力,虽然如此,最后还原创 2014-04-20 14:11:22 · 769 阅读 · 0 评论 -
设计模式(8)-结构型模式-Composite模式
2.结构型模式1.3 Composite模式2.3.1 功能 GoF的“高级“、“抽象”描述(不引用这句话吧,觉得他最准确;引用吧,只看这句话绝对是云里雾里,可以先把后面看完了再反回来看这句话):· 你想表示对象的部分 -整体层次结构 · 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。原创 2014-04-20 12:50:15 · 840 阅读 · 0 评论 -
设计模式(12)-结构型模式-Proxy模式
2.7 Proxy模式2.7.1 功能代理这个词随处可见,实际上这里的含义也和生活中遇到的各种代理是类似的。它主要可以完成三种功能· Remote Pro x y:负责对请求及其参数进行编码,并向不同地址空间中的实体发送已编码的请求。· Virtual Proxy:可以缓存实体的附加信息,以便延迟对它的访问。· Protection原创 2014-04-21 12:04:56 · 716 阅读 · 0 评论 -
设计模式(10)-结构型模式-Facade模式
2.5 Facade模式2.5.1 功能 GoF:为子系统中的一组接口提供一个一致的界面,F a c a d e模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 Facade模式不仅是一个面向对象的设计模式,也是一个常用的架构设计模式。事实上几乎所有的商用系统都要分模块,每个模块都会尽量的以“服原创 2014-04-21 11:41:57 · 585 阅读 · 0 评论 -
设计模式(13)-行为型模式-Chain of Responsibility
1.1 Chainof Responsibility1.1.1 功能ü 将可能处理一个请求的对象链接成一个链,并将请求在这个链上传递,直到有对象处理该请求;ü 由于传递过程是在每个请求中进行的,因此使得多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。1.1.2 结构图、对象图•H a n d l e r(如He l p H a原创 2014-04-22 08:38:13 · 745 阅读 · 0 评论 -
面向对象程序设计的六大原则(3)- 里氏替换原则
肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的。定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子原创 2014-04-08 17:45:12 · 1392 阅读 · 0 评论 -
面向对象程序设计的六大原则(1)-单一职责原则
SOLID原则1原创 2014-04-08 16:52:32 · 1928 阅读 · 0 评论 -
设计模式(19)-行为型模式-OBSERVER模式
3.7.1 功能别名:依赖(Dependents), 发布-订阅( P u b l i s h - S u b s c r i b e)这种交互也称为发布-订阅 (pu b l i s h - s u b s c r i b e) 。发布者发出通知时并不需知道谁是它的观察者。可以有任意数目的观察者订阅并接收通知。3.7.2 结构 •S u b j e c t(目标)— 目原创 2014-06-01 16:38:31 · 848 阅读 · 0 评论