idea查看类图
1、安装UML插件
2、设置类图呈现的内容
创建型
- 工厂模式
需要一辆车,直接从工厂提货
- 抽象工厂
想要吃的或者喝的,从工厂拿出来的都是这一系列的产品
- 建造者模式
汉堡、可乐、薯条、炸鸡这些产品不变,但是组合是会经常变的-》(套餐)
StringBuilder
- 原型模式
1、细胞分裂;
2、Java中的 Object clone() 方法。
- 单例
一个班级只能有一个班主任
行为型
- 中介者
房主、租客、中介
MVC框架,C时M和V的中介者
- 命令模式
电视机-请求接收者,遥控器-请求发送者,遥控器上不同的按钮对应电视机不同操作。3个具体命令实现了抽象命令接口:开电视、关电视、切换频道
- 备忘录
list的add(index,element方法)
index 0,当前要插入的位置已存在时,会自动将当前位置及之后的元素全部后移进行插入
打游戏时候的存档。
ctrl+z
浏览器中的后退
事务管理
- 模板模式
用于:继承代码的复用
建房子时,地基、走线、水管一样,建筑后期才会加壁橱、栅栏
- 状态模式
-
类似开关一样的状态切换 主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。
打篮球的运动员可以有:正常状态、不正常状态、超常状态
每次执行handler的时候,要把ligth放置到另外一个状态
- 策略模式
旅游出行方式:骑自行车、坐汽车,每一种方式是一个策略
- 观察者
拍卖东西,拍卖师观察最高价,通知其他竞价者竞价
- 解释器
运算表达式计算
- 访问者
儿子和父亲,儿子对父亲做一个描述
- 责任链
击鼓传花
- 迭代器
java中的iterator
结构型
-
享元模式
以共享的方式高效地支持大量的细粒度对象 例如String * 享元模式一般是解决系统性能问题的,所以经常用于底层开发,在项目开发中并不常用
数据库的数据池
string,有则返回,没有则创建字符串保存在缓存池中
-
代理模式
火车票不一定在火车站买,可以在代售点买
windows的快捷方式
Spring aop
-
外观模式
去医院看病,家属处理挂号、取药、交钱很麻烦,提供接待员,让接单员处理
-
桥接模式
什么人吃什么食物喝什么饮料
墙上的开关,可以看到的开关是抽象的,不管里面具体怎么实现。
-
组合模式
-
比如一个商店调整了价格 让所有分店价格都改变
button和checkbox是树叶,container是树支
-
装饰者
要点: 1. 装饰者和被装饰对象有相同的超类型。 2. 可以用一个或多个装饰者包装一个对象。 3. 装饰者可以在所委托被装饰者的行为之前或之后,加上自己的行为,以达到特定的目的。 4. 对象可以在任何时候被装饰,所以可以在运行时动态的,不限量的用你喜欢的装饰者来装饰对象。 5. 装饰模式中使用继承的关键是想达到装饰者和被装饰对象的类型匹配,而不是获得其行为。 6. 装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型。在实际项目中可以根据需要为装饰者添加新的行为,做到“半透明”装饰者。 7. 适配器模式的用意是改变对象的接口而不一定改变对象的性能,而装饰模式的用意是保持接口并增加对象的职责。
一个形状装饰上,它可以改变颜色,但是不能改变形状。
-
适配器
美国电器110v,中国电器220v,要一个变压器,把110v变220v
-
记忆23种设计模式,口诀:
5创建型:原来的建设工厂人单独抽奖
原型 、建造者、工厂、单例、抽象工厂
7结构性:带上适当的装备组合可以让外国侨胞享受
代理、适配、装饰、组合、外观、桥接、享元
11行为型:访问者写好策略备忘录观察模板迭代的状态、命令中介解释责任链
23种设计模式实例代码:
设计模式溜达原则(SOLID)
1、开闭原则(open)——扩展性好,便于维护和升级
2、单一职责原则(single)——每个类的职责单一
3、里氏替换原则(LISKOV)——引用基类的地方必须透明使用子类对象。子类对父类的方法尽量不要重载或者重写
4、依赖倒置原则(dependence)——不予具体类交互,与具体类的上层接口交互
5、接口隔离原则(interface)——客户端不依赖不需要的接口
6、迪米特法则(最少知道法则)(Law of Demeter)——一个类对自己依赖的类指导的越少越好
7、合成复用原则(composite reuse)——尽量采用组合,而不是继承
记忆口诀:SOLID CD(稳固的CD)