设计模式:概述

47 篇文章 0 订阅
23 篇文章 0 订阅

本文简要介绍 23 种设计模式

一、概述

六大原则:

单一职责
里式替换
接口隔离
依赖倒置
迪米特原则
开闭原则

23种设计模式:

口诀:
四者三器两工厂
装饰策略作门面
代理享元搭桥梁
单例命令变状态
备忘录上现原型
模板组合责任链

二、详解

(1)六大原则

单一职责

就是单一职责,一个类只干一件事

里氏替换

使用父类的地方都可以换成子类。
所以,子类只能在父类的约束下行事。

java 的继承就是这样设计的:子类重写父类的方法时,参数类型、数量都必须与父类一致,返回值的类型范围只能小于等于父类。

(可以写出一个子类参数范围大于父类参数的方法,但那已经是重载了)

依赖倒置

面向接口编程。
模块之间的依赖关系通过接口发生。
接口或抽象类不依赖于实现类,实现类依赖接口或抽象类。
自然界的抽象依赖于细节,而程序的细节依赖于抽象,所以叫倒置。

接口隔离

接口尽量细化,接口的方法尽量少。
客户端不应该依赖它不需要的接口。
类间的依赖关系应该建立在最小的接口上。

迪米特法则

最少知识法则。
一个对象应该对其他对象有最少的了解。

开闭原则

对扩展开放,对修改关闭。

(2)23 种设计模式

建造者

glide、okhttp、room、dialog…

Builder.build()

中介者

又称,调度者。
把网形结构变成星形结构,两端之间不直接沟通。
如 mvc、handler。
Activity 持有 view,方便 view 与其他 view 沟通。方便 view 和 model 沟通。
handler 多线程之间方便沟通。单线程之内统一调度。

观察者

onclick、obversable、广播

访问者

定义访问者接口
实现访问者接口,定义访问的方式
在被访问者中接待访问者

适配器

将新类通过适配器转化为老类
将新类老类抽一个接口,让代码一起访问
A C B

迭代器

容器类的标配,iterator
因太普遍而没落的模式

解释器

语法解析
公式解析

工厂方法

代替new,使一个类的实例化延迟到其子类。

侧重于方法,工厂内有一个方法​

简单工厂

静态工厂

多个工厂

根据某种维度划分多个工厂

替换单例

反射

延迟初始化

延迟销毁,缓存下来重复利用

抽象工厂

侧重于工厂,工厂内有多个方法

装饰

装饰器是对继承的有力补充
装饰是一种特殊的代理模式
代理侧重于代理过程的控制
装饰侧重于功能的增删
给一个类新增一个方法
继承它,然后新增方法
继承它,然后持有一个它的实例,然后新增方法(代理)
装饰器可以包装装饰器

策略

定义一组算法,把它们都封装起来,并使他们可以互相替换
就是继承和多态
一个封装角色持有策略接口,策略接口有不同的实现
与代理区别

封装角色持有策略接口,但没有实现策略接口,实现的话就变代理了

门面

又称,外观模式。
封装,一个子系统只对外暴露一个入口。
Retrofit

代理

一个类代理另一个类。
一个类持有另一个类,一般这两个类都继承同样的接口。

享元

把一部分属性作为 key,放入池中进行复用
注意线程安全问题

桥梁

Father 有一个方法,Son 继承了这个方法,Grandson 也继承了这个方法。
如果 Son 修改了这个方法,那 Grandson 也会修改这个方法。
如果用桥接,就是 Father 持有一个对象,有一个设置该对象的方法,Son 继承了设置这个对象的方法。Son 修改了传入它的对象,Grandson 不受影响。
抽象公司持有抽象产品
把抽象公司和抽象产品连接起来,这就是桥梁

单例

懒汉、饿汉…

命令

解耦
两个模块用命令来沟通
client 发 command 给 invoker,invoker 执行 command

状态

简化复杂的 if else switch case
多种状态间的互相转换
context 只持有当前状态,如 1,然后 to2、to3,在 to2 内部,把 context 的状态设为自己,即2,然后再做所需的操作。

备忘录

回滚

原型

clone

模板

父类中的非抽象方法调抽象方法,子类实现抽象方法

组合

树形结构

责任链

链表执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值