设计与架构
常用设计模式图文说明、UML、架构
会飞的代码UP
自强不息,厚德载物。
展开
-
【UML】UML常见的几种视图
如果说UML是一种语言,那么UML的基本词汇包括参与者、用例、边界、类、包、组件、节点等,而UML视图便是其语法,将基本元素组织起来,形成有意义的句子。如果说UML是一种语言,那么其最大的特征就是可视化,一种可视化语言,几种不同的视图从不同的角度展示了软件产品的方方面面的特征。UML视图分为两类,静态视图和动态视图,静态视图包括用例图、类图和包图,描述结构型特征,决定了能做什么,动态视图包括活动图、原创 2017-03-26 13:57:15 · 11301 阅读 · 0 评论 -
【UML】UML元素的几种关系
UML(Unified Modeling Language),即统一建模语言或标准建模语言,始于OMG(Object Management Group,对象管理组织),是OOAD(Object Oriented Analysis Design,面向对象的分析与设计)高潮时期的产物。UML是一门统一的可视化建模语言,主要表现形式是图,自然就会有许多不同种类的图,下面先介绍一下类图。原创 2015-04-03 09:18:21 · 2458 阅读 · 0 评论 -
【设计模式】创建型模式之单例Singleton
在设计模式中,单例Singleton是一种简单、常用的创建型模式,它的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点,下面以C++为例说明单例的使用。1、一个简单的单例一个最一般的单例类图如下所示:如下Singleton类,使用了单例模式,仅仅对外部提供了一个访问接口,即public权限的静态成员函数Instance,与之相关联的是一个private权限的静态成员变量,用来保存唯一的类实原创 2016-05-02 21:16:37 · 1217 阅读 · 0 评论 -
【设计模式】创建型模式之抽象工厂Abstract Factory
抽象工厂Abstract Factory是一种创建型设计模式,目的在于提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂的类图如下,客户仅与抽象类定义的定义的接口交互,而不使用特定的具体类的接口。一个系统包含多种产品时,AbstractFactory声明创建各种抽象产品对象的操作接口,这些接口是直接暴露给Client的,而具体产品对象的创建则延迟到子类ConcreteFac原创 2016-05-08 18:25:10 · 2591 阅读 · 0 评论 -
【设计模式】创建型模式之生成器Builder
生成器Builder是一种创建型设计模式,意在将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 下面是Builder模式的类图—— Builder:为创建一个Product对象的各个部件指定抽象接口。 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,提供一个检索产品的接口。 Director:构造一个原创 2016-05-24 09:47:43 · 1030 阅读 · 0 评论 -
【设计模式】创建型模式之工厂方法Factory Method
工厂方法Factory Method是一种创建型设计意在定义一个用于创建对象的接口,让子类决定实例化哪一个类,也就使得一个类的实例化延迟到其子类。当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类来指定它所创建的对象的时候,或者当类将对象的职责委托给多个帮助子类中某一个并且希望将哪一个帮助子类是代理者这一信息局部化的时候,就可以使用工厂方法模式。工厂方法的类图如下:原创 2016-05-29 16:13:23 · 1181 阅读 · 0 评论 -
【设计模式】创建型模式之原型Prototype
原型Prototype是一种创建型设计模式,意在用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型Prototype是一种创建型设计模式,意在用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。当一个系统应该独立于它的产品创建、构成和表示时,或者当要实例化的类是运行时刻指定时,或者为了避免创建一个与产品类层次平行的工厂类层次时,或者当一个类的实例只能有几个不同状态组合中原创 2016-05-29 20:38:17 · 958 阅读 · 0 评论 -
【设计模式】结构型模式之适配器Adaptor
适配器Adaptor是一种结构型设计模式,目的是把一个类的接口转换成客户希望的另外一个接口,对接口进行包装,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。设想这么几种情况,当我们想使用一个已经存在的类,而这个类的接口不符合需求时,或者当我们想创建一个可以复用的类,这个类可以与其它不相关的类或不可预见的类协同工作时,或者当我们想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它原创 2016-07-31 17:37:53 · 968 阅读 · 0 评论 -
【设计模式】结构型模式之桥接Bridge
**桥接Bridge**是一种对象结构型设计模式,意在将抽象部分与它的实现部分分离,使它们都可以独立地变化。 Bridge模式的结构如下图所示: 上图中,Abstraction定义抽象类的接口,维护一个指向Implementor类型对象的指针;RefinedAbstraction扩充由Abstraction定义的接口;Implementor定义实现类的接口,该接口不一定要与Abstr原创 2016-08-07 11:21:34 · 691 阅读 · 0 评论 -
【设计模式】结构型模式之组合Composite
组合Composite是一种对象结构型设计模式,意在将对象组合成树形结构以表示部分与整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性。当我们想表示对象的部分与整体层次结构时,或者希望用户忽略组合对象与单个对象的不同,能够统一地使用组合结构中的所有对象时,我们可以使用Composite模式。Composite模式的结构如下类图所示:上图中,Component为组合中的对象声明接口,在适当的原创 2016-08-07 17:46:09 · 910 阅读 · 3 评论 -
【设计模式】结构型模式之装饰器Decorator
装饰器Decorator是一种对象结构型设计模式,意在动态地给一个对象添加一些额外的职责,就增加功能来说,采用继承机制生成子类也可以,但Decorator模式更为灵活。例如,当我们想给一个组件添加额外的功能时,就把这个组件嵌入另一个对象中,由这个对象来完成任务,充当装饰者,它与被装饰的组件接口一致,因此对于使用该组件的客户是透明的。装饰器Decorator模式的结构如下类图所示:图中,Compone原创 2016-08-09 21:11:06 · 745 阅读 · 0 评论 -
【设计模式】结构型模式之Facade外观
Facade外观是一种对象结构型设计模式,目的是为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。有时候我们将一个系统划分成若干个子系统以降低系统的复杂性,而子系统间的通信和相互依赖关系也要达到最小,尽量降低子系统间的耦合性,一个好用的方法就是引入一个Facade对象,为子系统中较一般的设施提供一个单一而简单的界面。Facade模式的结构原创 2016-08-13 13:13:23 · 613 阅读 · 0 评论 -
【设计模式】结构型模式之Flyweight
Flyweight是一种对象结构型设计模式,意在运用共享技术有效地支持大量细粒度的对象,对那些通常因为数量太大而难以用对象来表示的概念或实体进行建模。flyweight作为共享对象,可以同时在多个场景中使用,并且在每个场景中都可以作为一个独立的对象,这一点与非共享对象的实例没有区别。flyweight不能对它所运行的场景作出任何假设,这里的关键概念是内部状态和外部状态之间的区别。内部状态存储于fly原创 2016-08-20 10:45:02 · 912 阅读 · 0 评论 -
【设计模式】结构型模式之Proxy代理
Proxy代理是一种对象结构型设计模式,意在为其它对象提供一种代理以控制对这个对象的访问,对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。Proxy模式的结构如下图所示:上图中,Proxy保存一个引用使得代理可以访问实体,若RealSubject和Subject的接口相同,Proxy会引用Subject;Proxy提供一个与Subject的接口相同的接口,这原创 2016-08-21 10:50:03 · 804 阅读 · 0 评论 -
【设计模式】行为模式之Chain of Responsibility职责链
Chain of Responsibility职责链是一种对象行为型设计模式,目的是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;或者你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求;或者可处理一个请求的对象集合应被动态指定原创 2016-08-21 13:55:24 · 902 阅读 · 0 评论 -
【设计模式】行为模式之Command命令
Command命令是一种对象行为型设计模式,目的是将一个请求封装为一个对象,从而使得可用不同的请求对客户进行参数化,而且对请求排队或记录请求日志,以及支持可撤销的操作。在面向过程语言中的回调机制,如C语言,先在某处注册回调函数,而后在某个需要的时候进行调用,Command模式便是这种回调机制的一个面向对象的替代品,抽象出待执行的动作以参数化某对象。Command模式还可以在不同的时刻指定、排列和执行原创 2016-08-21 21:59:45 · 880 阅读 · 0 评论 -
【设计模式】行为模式之解释器Interpreter
解释器Interpreter是一种类行为型设计模式,目的是给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。当有一个语言需要解释执行,并且可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式,最常见的问题便是搜索匹配问题,以及随之而产生的正则表达式引擎。解释器模式的结构如下图:上图中,AbstractExpression即抽象表达式,声明一个抽象的原创 2016-08-27 09:12:14 · 972 阅读 · 0 评论 -
【设计模式】行为模式之迭代器Iterator
迭代器Iterator是一种对象行为型设计模式,目的是提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示,例如C++中的容器及其迭代器,便是这种设计模式的一种体现。 使用迭代器模式,可用来访问一个聚合对象的内容而无需暴露它的内部表示,支持对聚合对象的多种遍历,为遍历不同的聚合结构提供一个统一的接口。如下是迭代器模式的结构图:上图中,Iterator迭代器定义访问和遍历元素的接原创 2016-08-27 16:32:04 · 857 阅读 · 0 评论 -
【设计模式】行为模式之中介者Mediator
中介者Mediator是一种对象行为型设计模式,目的是用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在传统的面向对象设计过程中,通常将行为分布到各个对象中以增强可复用性,但随之也增加了对象间的相互连接,如果相互连接过多,使得一个对象似乎不太可能在没有其他对象的支持下工作,整个系统表现为一个不可分割的整体,导致对系统的行为原创 2016-08-28 21:04:37 · 849 阅读 · 0 评论 -
【设计模式】行为模式之备忘录Memento
备忘录Memento是一种对象行为型设计模式,目的是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。有时有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现检查点和取消操作,而要实现这些机制,必须事先将状态信息保存在某处,这样才能将对象恢复到它们先前的状态。但是对象通常封装了其部分或者所有的状态信原创 2016-09-01 07:23:15 · 697 阅读 · 0 评论 -
【设计模式】行为模式之Observer观察者
Observer观察者是一种对象行为型设计模式,目的是定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。在进行系统设计时,通常会将一个系统分割成一系列相互协作的类,模块化,降低耦合性,但这有一个常见的副作用,需要维护相关对象间的一致性,我们不希望为了维持一致性而使各类紧密耦合,因为这样降低了它们的可重用性。Observer模式可以解决这一问题,这一模式原创 2016-09-02 07:15:12 · 782 阅读 · 0 评论 -
【设计模式】行为模式之State状态
State状态是一种对象行为型设计模式,目的是允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。如果一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为,就可以使用State模式;或者一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态,也可以使用State模式。通常,这个状态用一个或多个枚举常量表示,有多个操作包含这一相同的条件结构,State原创 2016-09-03 07:29:27 · 682 阅读 · 0 评论 -
【设计模式】行为模式之Strategy策略
Strategy策略是一种对象行为型设计模式,目的是定义一系列的算法,把它们一个一个封装起来,并且使它们可相互替换,算法可独立于使用它的客户而变化。一个常见的应用是文本编辑器,其中有许多算法对一个正文流进行分析,将这些算法硬编进使用它们的类中是不可取的,因为需要换行功能的客户程序如果直接包含换行算法代码的话将会变得复杂,这使得客户程序庞大并且难以维护,尤其当其需要支持多种换行算法时问题会更加严重,而原创 2016-09-03 08:49:49 · 692 阅读 · 0 评论 -
【设计模式】行为模式之Template Method模板方法
Template Method模板方法是一种类行为型设计模式,目的是定义一个操作中的算法的骨架,而将一些步骤延迟到之子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体的行为。Template Method模板方法的结构如下图所示:上图中,AbstractClass抽象类定义抽象的原语操作,具体的子类将重定原创 2016-09-04 09:23:06 · 629 阅读 · 0 评论 -
【设计模式】行为模式之Visitor访问者
Visitor访问者是一种对象行为型设计模式,用于表示一个作用于某对象结构中的各元素的操作,使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。使用Visitor模式, 必须定义两个类层次,一个对应于接受操作的元素,另一个对应于定义对元素的操作的访问者,给访问者类层次增加一个新的子类即可创建一个新的操作。Visitor访问者模式的结构如下图所示:上图中,Visitor访问者为该对象结构中C原创 2016-09-04 10:07:10 · 662 阅读 · 0 评论