设计模式通俗概述

设计模式七大原则

1) 总原则——开闭原则:一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭

2) 单一职责原则:一个类应该只有一个发生变化的原因。

3) 里氏代换原则:所有引用基类的地方必须能透明地使用其子类的对象。

4) 依赖倒置原则:1.上层模块不应该依赖于底层细节;2.抽象不应该依赖于具体/细节,细节应该依赖于抽象

5) 接口隔离原则:类间的依赖关系应该建立在最小的接口上(不依赖不需要的接口)

6) 迪米特法则/最少知识原则:只与你的直接朋友【成员变量、方法参数、方法返回值中的类】交谈,不跟“陌生人”【局部变量、临时变量】说话。(对自己所依赖的类知道越少越好,有效降低耦合度)

7) 合成复用原则:尽量使用对象组合/聚合(关联),而不是继承关系达到软件复用的目的。

设计模式三大类

创建型模式(Creational)、结构型模式(Structural)、行为型模式(Behavioral)

1 创建型模式

对类的实例化过程进行抽象,将软件模块中对象的创建和使用分离

1.1 简单工厂模式

应用实例:工厂提车,无需管车如何做出来,但是要说明需要哪辆车(参数)才可获得。

1.2 工厂方法模式

应用实例:工厂提车,无需说明哪辆车,工厂自主选择生产哪辆车,并且扩展灵活。

1.3 抽象工厂模式

应用实例:给某软件换主题皮肤,改了不同主题相应的一系列控件(按钮、文本框、下拉框)皮肤都会改变。

1.4 建造者模式

应用实例:自行组装电脑,电脑城(工厂)提供CPU、内存、硬盘主机和显示器,如果要装服务器可以不要显示器、如果家庭电脑可以都要,用户自行组装选择。

1.5 原型模式

应用实例:复制操作

1.6 单例模式

应用实例:资源管理器、菜单界面有且只有一个

2 结构型模式

关注对象的组成以及对象间的依赖关系,描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,通过简单积木的组合形成复杂、功能强大的结构。

2.1 适配器模式

应用实例:在接口不一的情况下,适配转换调用现成已有的算法或者类,达到复用。

2.2 桥接模式

应用实例:彩笔和蜡笔的故事,两个不同维度变化的类。

2.3 组合模式

应用实例:文件夹、QQ群等分层树形结构

2.4 装饰模式

应用实例:给一个对象添加额外功能,如最初消息提醒仅仅发出声音,现在添加在提醒同时要闪烁灯光。

2.5 外观模式

应用实例:隐藏一系列复杂操作(子系统),提供一键操作(一个简单接口)来实现,如一键开机,电脑会自动进行硬件检查和软件启动。

2.6 享元模式

应用实例:一个资源被多个对象共享,如数据库的数据池。

2.7 代理模式

应用实例:

1) 远程代理:客户端需要访问远程主机中的对象,如JAVA RMI

2) 虚拟代理:快捷方式(用一个消耗资源少的对象来代表消耗资源多的对象,如快捷方式在桌面文件夹内占用资源很小,但双击也能方便我们快速打开软件实现功能)

3) 保护代理:需要控制一个对象的访问权限,如论坛已注册用户和游客发表评论权限不同

4) 缓冲代理:为某一个频繁访问的操作结果提供临时存储空间,以供多个客户端共享访问。

5) 智能应用代理:为一个对象的访问提供一些额外的操作,如日志记录、事务处理。

3 行为型模式

关注于对象的行为问题,在不同对象之间划分责任和算法的抽象化,不仅关注类和对象的结构,而且重点关注它们之间的相互作用

3.1 职责链模式

应用实例:try-catch异常捕获处理机制,异常被对应catch,若类型不一致,传递到下一个catch。(注意,由于存在一个try语句的异常最终未被任何catch语句处理的情况,即一个请求可能最终不被任何处理者对象接受并处理,故是不纯的职责链模式。)

3.2 命令模式

应用实例:类似开关(一个键位开电灯,一个键位开风扇,也可以更换开关的键位功能,如开空调)实现命令发送者和请求接收者解耦。可以支持撤销、恢复、命令队列以及宏命令操作。

3.3 解释器模式

应用实例:用到编译原理的知识,如解释0和1的或运算和与运算。

3.4 迭代器模式

应用实例:迭代遍历一个集合中的内容。

3.5 中介者模式

应用实例:MVC框架,其中C(控制器)就是M(模型)和V(视图)的中介者;以前发文件要一个个发,利用群聊(中介)达到一呼百应的结果。

3.6 备忘录模式

应用实例:实现撤销保存的操作,游戏存档,浏览器页面后退,数据库事务管理。

3.7 观察者模式

应用实例:红灯亮了,两个观察者做出反应:行人停,车辆行。

3.8 状态模式

应用实例:游戏中用户角色等级有入门、熟练、高手和骨灰级(4个状态),不同级别胜利和失败的积分判定加成不同(各个状态对应的操作大同小异)。

3.9 策略模式

应用实例:旅行出行方式[抽象策略类](自行车[具体策略类]、汽车、飞机)

3.10 模板方法模式

应用实例:造房子时地基、走线、水管都一样直接拿来套用(父类已经实现好的具体方法)即可,只有在建筑的后期才有加壁橱加栅栏(具体需要子类实现的方法)等差异;

3.11 访问者模式

应用实例:类结构稳定,但是操作变化可使用该模式。如公司结构很稳定,老板舍不得花钱招人,总共就那么3个人,还是3种角色,即只有3个元素。公司老板想法多,这就要求这3个人承担各种新技能,即不断的给元素增加新的算法。

参考:

清华大学出版社-图书详情-《Java设计模式》 (tsinghua.edu.cn)

快速记忆23种设计模式 - 知乎

秒懂设计模式之访问者模式(Visitor Pattern) - 知乎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值