设计模式补完计划

目录

1.uml类图
2.uml时序图
3.设计模式

uml类图

  1. 泛化关系(继承):指类继承自类,接口继承自接口的关系,用extend关键字


    1.泛化关系
    1.泛化关系
  2. 实现关系:指类继承自接口,用implement关键字


    2. 实现关系
    2. 实现关系
  3. 聚合关系,表示B由A组成,整体和部分不是强依赖关系,整体不存在,部分也存在。比如大雁和雁群


    3. 聚合关系
    3. 聚合关系
  4. 组合关系,表示B由A组成,整体不存在了,部分也不存在,用实心菱形表示。B类和A类的生命周期相同。比如大雁和翅膀。
  5. 关联关系:实线箭头。表示强关联关系,一般是B类中存在属性类A
  6. 依赖关系:虚线箭头,表示一个对象运行期间会用到另一个对象的关系。一般是B类中method的参数用到A类

uml时序图

动态图包括【交互图】【活动图】【状态图】
其中交互图又包括【时序图】【协作图】

时序图组成

对象Object

对象

矩形将对象包裹起来,名称下有下划线。
对象创建时机:

  • 处于顶端:说明交互时对象已经存在
  • 不在顶部:说明对象在交互过程中创建

生命线Lifeline

生命线

虚线,表示对象的存在,长度取决于交互时间。

激活Activation

激活

表示对象执行一项操作的时期,这个时候对象被占用以完成某项任务。

  • 去激活:表示对象处于【空闲状态】。对象的去激活是在激活条的底部,通常发生在一个消息离开对象生命线。
  • 激活:生命线变为矩形,这个矩形就是激活条。对象激活是在激活条的顶部。

消息

时序图和协作图中消息的区别:时序图强调消息的顺序,协作图强调交换消息的对象间的关系。
消息类型:


异步消息;发送者发送消息后,继续自己的活动,异步消息的发送者和接受者是并发工作的

同步消息=调用消息;发送者发送后停止活动,等待消息接受者放弃或者返回控制

过程调用中返回的消息;

绘制反身消息;又叫自关联消息,表示方法自身调用以及一个对象内的方法调用了另外一个方法

设计模式

设计模式一般分为三种: 创建型模式,结构型模式,行为型模式

创建型模式

包含模式

simple Factory Pattern 又叫静态工厂模式(static Factory Method)
缺点:
一旦添加新产品,就要修改工厂逻辑,可能造成工厂逻辑复杂,不利于系统的扩展和维护
优点:
传一个参数,就能获得需要的产品/对象,适用于工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,不关心如何创建

也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式
在这里,核心的共产类不再负责所欲产品的创建,而是将具体的工作交给子类去做,核心类仅仅负责定义具体工厂类必须实现的接口。使得工厂方法模式可在系统不修改工厂角色的情况下引进新产品。
可以理解为在简单工厂方法的基础上,对工厂也做了抽象,然后使用面向对象的多态性,动态生成工厂。

  • 抽象工厂模式(Abstract Factory)
    重要程度:5

与工厂方法模式最大的区别在于,我又被强化了。工厂方法针对的是一个产品登记结构,而抽象工厂模式则需要面对多个产品等级结构。
新增工厂和产片容易,但是新增产品等级结构麻烦。
如很多系统软件需要更改主题,界面的按钮。文本框。背景色等一起发生变化时,可以使用抽象工厂模式进行设计。

开闭原则:
要求系统对扩展开放,对修改封闭。
工厂模式的退化

  • 当抽象工厂模式中每一个具体工厂类只创建一个产品对象,也就是只存在一个产品等级结构时,抽象工厂模式退化成工厂方法模式;
  • 当工厂方法模式中抽象工厂与具体工厂合并,提供一个统一的工厂来创建产品对象,并将创建对象的工厂方法设计为静态方法时,工厂方法模式退化成简单工厂模式。
  • 建造者模式(Builder)
    重要程度:2

Android中经常使用的builder模式,解决了成员属性初始化的一系列问题,比如判断啦,赋值先后顺序啦,在创建者模式里完全内部实现,不用暴露给对象用户。用户无需关心属性的组装方式。

  • 原型模式(Prototype)
    重要程度:3

JavaScript使用的这种模式,来实现类的继承和扩展。
其特点在于:复制一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所叫的“原型”。
原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。

优点:加速并简化对象的创建,比如在一个循环内创建对象,使用原型模式最好。
注意:
1.原型模式复制对象不会调用类的构造方法。它直接在内存中复制数据。
2.Object的clone是浅拷贝,只会拷贝对象中的基础数据类型,对于数组·容器对象 ·引用对象都不会拷贝。

  • 单例模式(Singleton)
    重要程度:4

结构型模式

包含模式

  • 适配器模式(Adapter)
    重要程度:4

Android界面开发大量使用的模式,适配器的实现是把客户类的请求转换为对适配者的相应接口的调用。
适配器模式:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作。其别名为包装器(Wrapper)。适配器可以作为类结构模型,也可以作为对象结构模型。
适用环境:系统需要使用现有类,而现有类不符合系统的需要。

  • 桥接模式(Bridge)
    重要程度:3

  • 组合模式(Composite)
    重要程度:4

  • 装饰模式(Decorator)
    重要程度:3

将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,我们称这个嵌入的对象为装饰器(Decorator).装饰模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。这就是装饰模式的模式动机。

  • 外观模式(Facade)
    重要程度:5

  • 享元模式(Flyweight)
    重要程度:1

  • 代理模式(Proxy)
    重要程度:4

通过引入代理对象来间接访问一 个对象,这就是代理模式的模式动机。给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式
几种常用的代理模式
图片代理;远程代理;虚拟代理

行为型模式

行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。
行为型模式不仅关注类和对象的结构,而且重点关注他们之间的相互作用
通过行为型模式,更清晰的划分类和对象的职责。

行为型分为: 类行为型模式 对象行为型模式

  • 类行为型模式: 使用继承关系在类之间分配行为,类行为型模式通过多态方式(polymorphism)分配父类与子类的职责

  • 对象行为型模式:使用对象的聚合关联关系来分配行为,通过对象关联等方式来分配两个或多个职责。系统中药尽量使用关联关系来取代继承关系

包含模式

  • 职责链模式(Chain of Responsibility)
    重要程度:3

  • 命令模式(Command)
    重要程度:4
    特点是请求调用者和接受者解耦;可在不通的时间制定请求,将请求排队和执行;支持命令的撤销和恢复,支持命令的组合

  • 解释器模式(Interpreter)
    重要程度:1

  • 迭代器模式(Iterator)
    重要程度:5

  • 中介者模式(Mediator)
    重要程度:2

  • 备忘录模式(Memento)
    重要程度:2

  • 观察者模式(Observer)
    重要程度:5
    对象与对象之间的依赖关系,一个对象发生改变时自动通知其他对象,其他对象做出相应的反应。发生改变的对象(观察目标),被通知的对象(观察者)。一个观察目标可对应多个观察者。观察者之间没有相互联系
    优点:
    可实现表示层逻辑层的分离,并定义稳定的消息更新机制,抽象了更新接口。
    在观察者和观察目标之间建立一个抽象的耦合
    支持广播通信。
    凡是涉及一对一或者一对多的对象交互场景都可以使用观察者模式。

  • 状态模式(State)
    重要程度:3
    也可以理解为我们在游戏开发中经常使用的状态机

  • 策略模式(Strategy)
    重要程度:4
    可以理解为解决一个问题有很多算法,每种算法都是一种策略。
    我们可以定义一些独立的类来封装算法,每一个算法就是一个策略类。为了保证策略一致性,我们做一个抽象类做算法的定义。
    这样策略模式让算法独立于它的客户变化而变化,也称作政策模式(Policy)

  • 模板方法模式(Template Method)
    重要程度:3

  • 访问者模式(Visitor)
    重要程度:1

参考文档

创建型模式
【UML 建模】UML入门 之 交互图 -- 时序图 协作图详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,635评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,543评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,083评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,640评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,640评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,262评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,833评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,736评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,280评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,369评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,503评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,870评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,340评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,460评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,909评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,512评论 2 359

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,948评论 1 15
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 752评论 0 1
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 3,807评论 3 14
  • 一个UML类图 类之间的关系 类的继承结构表现在UML中为:泛化(generalize)与实现(realize) ...
    僚机KK阅读 647评论 0 0