设计模式大纲
2019-08-01 00:19:56 64 举报
AI智能生成
后端:设计模式思维导图
作者其他创作
大纲/内容
适配器模式(Adapter)
案例: 使用火鸡来模拟鸭子
定义: 将一个类的接口,转换成客户期望的另一个接口,适配器让原本不兼容的类可以合作无间
外观模式(Facade)
案例: 建立自己的家庭影院~
定义: 提供了一个统一的接口,用于访问子系统中的一群接口. 外观定义了一个高层接口,让子系统更容易使用
模板模式(Template Method)
案例: 创建咖啡和茶
定义: 在一个方法中(父类)定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类
可以在不改变算法结构的情况下, 重新定义算法中的某些步骤
可以在不改变算法结构的情况下, 重新定义算法中的某些步骤
迭代器模式(Iterator)
案例: 对象村餐厅(数组存储菜单) 和 对象村煎饼屋(ArrayList存储菜单)合并了.
合并后如何打印出 当前菜单呢? printMenu()
合并后如何打印出 当前菜单呢? printMenu()
定义: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示
(即封装遍历, 将遍历元素的动作抽取出来, 将女招待解耦了.女招待无需知道菜单列表是如何被实现的)
(即封装遍历, 将遍历元素的动作抽取出来, 将女招待解耦了.女招待无需知道菜单列表是如何被实现的)
组合模式(composite)
案例: 希望加上一份 餐后甜点的 "子菜单"
允许你将对象组成树形结构来表现"整体 / 部分"的层次结构.
组合能让客户以一致的方式处理个别对象和对象组合
组合能让客户以一致的方式处理个别对象和对象组合
状态模式(State)
案例: 设计糖果机!(状态: 糖果售罄,没有25分钱,有25分钱, 售出糖果)
动作: 投入25分钱, 退回25分钱, 转动曲柄
动作: 投入25分钱, 退回25分钱, 转动曲柄
定义: 允许对象在内部状态在改变时改变它的行为,对象看起来好像改变了它的类
(将状态与该状态下的行为封装成独立的类,并将动作委托到代表当前状态的对象)
(将状态与该状态下的行为封装成独立的类,并将动作委托到代表当前状态的对象)
代理模式(Proxy)
案例: 远程监视糖果机的状态(剩余库存数量)
为另一个对象提供一个替身或占位符以访问这个对象
应用场景
远程代理 虚拟代理 动态代理等
模式中的模式--复合模式
复合模式的定义: 是指一群模式被结合起来使用,以解决一般性问题
案例1: 一群模式的协作-- 鸭子模拟器
案例2: MVC模式
剩下的模式
桥接模式(Bridge)
使用桥接模式,不只改变你的实现,也改变你的抽象
生成器模式(Builder)
封装一个产品的构造过程,并允许按步骤构造
责任链模式(Chain of Responsibility)
当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式
蝇量模式(Flyweight)
让某个类的一个实例能够提供许多"虚拟实例"
解释器模式(Interpreter)
为语言创建解释器
中介者模式(Mediator)
使用中介者模式来集中相关对象之间复杂的沟通与控制方式
备忘录模式(Memento)
当你需要让对象返回之前的状态时,就使用备忘录模式
原型模式(Prototype)
当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式
访问者模式(Visitor)
当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式
OO原则
封装变化
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
多用组合,少用继承
鸭子的行为不是继承而来的,而是和适当的行为对象"组合"来的
不仅可将算法族封装成类,更可以"在运行时动态地改变行为"
针对接口编程,而不是针对实现编程
鸭子的行为将放在分开的类中,此类专门提供某行为接口的实现
为交互对象之间的松耦合设计而努力
改变主题或观察者其中一方,并不会影响另一方,因为两者是松耦合的
当两个对象之间松耦合,它们依然可以交互,但是不太清除彼此的细节
当两个对象之间松耦合,它们依然可以交互,但是不太清除彼此的细节
类应该对扩展开放,对修改关闭
依赖抽象,不需依赖具体类
减少对于具体类的依赖 . 以免具体类修改/删除时,当前代码要跟着改变
最少知识原则: 只和你的密友谈话
不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分
好莱坞原则:别调用(打电话)我们,我们会调用(打电话)你
允许底层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些底层组件
类应该只有一个改变的理由
设计模式的划分
根据模式的目标划分成3个类目
创建型
创建型模式涉及到将对象实例化, 这类模式都提供一个方法, 将客户从所需要实例化的对象中解耦
单例模式
构建者模式
原型模式
抽象工厂模式
工厂方法模式
行为型
只要是行为型模式,都涉及到 类和对象如何交互和分配职责
模板方法模式
迭代器模式
命令模式
观察者模式
状态模式
策略模式
结构型
结构性模式可以让你把类或对象组合到更大的结构中
装饰者模式
代理模式
组合模式
外观模式
适配器模式
策略模式(Strategy)
案例:鸭子模拟器,实现具有各种行为组合的鸭子
定义:策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,
此模式让算法的变化部分 (鸭子行为) 独立于算法的客户(鸭子)
此模式让算法的变化部分 (鸭子行为) 独立于算法的客户(鸭子)
观察者模式 (Visitor)
案例:设计气象站 和广告板. 让气象站数据变化时通知所有广告板.并且广告板可动态扩展
定义: 在对象之间定义一对多的依赖,这样一来, 当一个对象改变状态,依赖它的对象都会收到通知,并自动更新
装饰者模式 (Decorator)
案例: 设计星巴兹咖啡, 主体(DarkRoast等) + 配料 (摩卡,奶泡等)
定义: 动态地将责任附加到对象上.想要扩展功能,装饰者提供有别于继承的另一种选择(组合)
工厂模式
案例: 披萨店创建披萨订单 (品种)芝士披萨,蛤蜊披萨,素食披萨 -->(分店)美国风味,芝加哥风味
种类
简单工厂(Simple Factory)
定义一个创建对象的接口 (new) , 扩展性差(开分店了怎么办)
工厂方法模式(Facotory Method)
定义了一个创建对象的接口, 但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类
抽象工厂模式(Abstract Factory)
提供一个接口,用于创建相关 或依赖对象的家族,而不需要明确指定具体类
单例模式(Singleton)
案例: 创建唯一的 巧克力锅炉控制器
定义: 确保一个类只有一个实例,并提供全局访问点
命令模式 (Command)
案例: 智能遥控器, 一个插槽(某设备具体供应商)对应两个按钮 on , off ,以及一个全局的撤销操作undo
定义: 将请求封装成对象,将发出请求的对象(服务员/按钮)和执行请求的对象(厨师/具体供应商)解耦 , 也可以支持撤销操作
0 条评论
下一页