目录
uml类图
-
泛化关系(继承):指类继承自类,接口继承自接口的关系,用extend关键字
1.泛化关系 -
实现关系:指类继承自接口,用implement关键字
2. 实现关系 -
聚合关系,表示B由A组成,整体和部分不是强依赖关系,整体不存在,部分也存在。比如大雁和雁群
3. 聚合关系 - 组合关系,表示B由A组成,整体不存在了,部分也不存在,用实心菱形表示。B类和A类的生命周期相同。比如大雁和翅膀。
- 关联关系:实线箭头。表示强关联关系,一般是B类中存在属性类A
- 依赖关系:虚线箭头,表示一个对象运行期间会用到另一个对象的关系。一般是B类中method的参数用到A类
uml时序图
动态图包括【交互图】【活动图】【状态图】
其中交互图又包括【时序图】【协作图】
时序图组成
对象Object
矩形将对象包裹起来,名称下有下划线。
对象创建时机:
- 处于顶端:说明交互时对象已经存在
- 不在顶部:说明对象在交互过程中创建
生命线Lifeline
虚线,表示对象的存在,长度取决于交互时间。
激活Activation
表示对象执行一项操作的时期,这个时候对象被占用以完成某项任务。
- 去激活:表示对象处于【空闲状态】。对象的去激活是在激活条的底部,通常发生在一个消息离开对象生命线。
- 激活:生命线变为矩形,这个矩形就是激活条。对象激活是在激活条的顶部。
消息
时序图和协作图中消息的区别:时序图强调消息的顺序,协作图强调交换消息的对象间的关系。
消息类型:
设计模式
设计模式一般分为三种: 创建型模式,结构型模式,行为型模式
创建型模式
包含模式
-
简单工厂模式(Simple Factory)
重要程度:4 (5为满分)
simple Factory Pattern 又叫静态工厂模式(static Factory Method)
缺点:
一旦添加新产品,就要修改工厂逻辑,可能造成工厂逻辑复杂,不利于系统的扩展和维护
优点:
传一个参数,就能获得需要的产品/对象,适用于工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,不关心如何创建
-
工厂方法模式(Factory Method)
重要程度:5
也叫虚拟构造器(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