OOA(object-Oriente Analysis): 分析提出解决方案。
OOD(object-Oriente Design):对OOA 进行进一步实现。
一般连起来使用,说OOAD。
主要学习三个步骤:
1、用例。
2、设计模型,类与类之间的关系描述,类图(静态模型)
外观模式
封装,隐藏实现细节,简化操作流程,解耦。
应用场景:复杂子系统,改进使用操作类来操作子系统,通过使用操作类来使用子系统。 不关心子系统内部的逻辑,只需要操作后的记过就行。 (通过manager管理所有的操作,外面直接调用manager的方法)
demo连接
责任链模式
本质:
1、 让请求者不关心具体接收者是谁,只需要得到自己的具体结果。
2、在一个请求对应多个接收者情况下,接收者之间可以自由组合,灵活性很高。
3、新增接收者处理,也只需要增加链中的一个节点,不需要改动太多。
例子: 找人,一个个往下寻找,直到所有人都问了一遍,最终返回找到或者没找到的情况。
demo连接
命令模式
角色分析:
角色一:接收者-->receiver(具体实现)MacComputer
角色二: 命令接口--> CommandProtocol (协议)
角色三: 具体命令角色 --> ConcrateCommand (实现类),每一个实现类都需要遵守接口或者说协议。
MacStartupCommand MacShutdownCommand
特点: 持有接收者的引用
角色四: 请求者 --> Invoker MacInvoker
demo连接
泛型适配
泛型设计的代码 加命令模式
适配器模式
角色分析:
角色一:目标接口,通过该接口获取到目标需要的数据,protocol
角色二:被适配者adaptee
角色二: 适配器 adaptor 用,核心部分,该部分用来处理需要的具体操作。分为两类: 类适配器,adaptor 继承自adaptee,对象适配器,adaptor 持有adaptee。
适配器模式相关的代码
工厂模式
1、定义一个用于创建对象的统一接口,然后由子类实现。
2、角色划分
角色一:抽象产品
角色二:具体产品
角色三: 抽象工厂
角色四:具体工厂
demo连接
简单工厂:
角色划分
角色一: 具体产品
角色二:具体工厂
demo连接
抽象工厂
至少有2条流水线
抽象工厂角色划分 :
角色一:抽象产品A -> MapViewProtocol
角色二:抽象产品B -> MapLocationProtocol
角色三:具体产品A1 -> BaiduMapView
角色四:具体产品A2 -> GaodeMapView
角色五:具体产品B1 -> BaiduMapLocation
角色六:具体产品B2 -> GaodeMapLocation
角色七:抽象工厂->MapFactoryProtocol
角色八:具体工厂A ->BaiduMapFactory
角色九:具体工厂B ->GaodeMapFactory
demo连接
策略模式
特点:1、定义了一系列的算法
2、每一个算法单独封装
3、每一个算法都可以相互替换
4、客户端可以独立变换算法(客户端就是调用者)
应用场景:
第一点:针对同一类型的问题多种处理方式,仅仅只是具体的行为有差别。
第二点:需要安全的封装统一类型的操作
第三点:出现同一个抽象类有多个子类,而又需要使用if-else或者switch-case 来选择具体的子类
开发场景案例: 加密算法
角色划分:
角色一:策略接口
角色二:具体策略
角色三:策略上下文(管理器)一般忽略,->而是用工厂
demo连接
构建者模式 (建造者模式、builder模式)
角色一:抽象产品-> productProtocol (可有可无)
角色二: 具体产品-> concreteProduct (核心)
角色三:抽象构建者(可有可无)
角色四: 具体构建者 (核心)
角色五: 统一组装(可有可无)
demo连接
模板方法模式
角色划分:
角色一: 抽象类 ->定义算法的框架结构,将一些特定的步骤延时到子类实现
角色二: 具体模板实现类,不改变算法结构,选择性去实现某些特定的步骤
demo连接
观察者模式
角色划分:
角色一: 被观察者(目标对象)
角色二: 具体被观察者
角色三: 观察者(抽象)
角色四:具体观察者
网友评论