声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改。
系列文章目录
- 简单工厂模式
- 策略模式模式
- 装饰模式(进行中)
- 代理模式(进行中)
- 工厂方法模式(进行中)
- 原型模式
- 模板方法模式
- 外观模式
- 建造者模式
- 观察者模式
- 抽象工厂模式
- 状态模式
- 适配器模式
- 备忘录模式
- 组合模式
- 迭代器模式
- 单例模式
- 桥接模式
- 职责链模式
- 中介者模式
- 享元模式
- 解释器模式
- 访问者模式
前言
本文为23种设计模式学习,参考大话设计模式,网络视频教程并结合本人工作中使用经验总结…
本人为Unity C#开发者.本文源码语言为C#,但并不影响其他语言使用者参考借鉴.
设计原则
例子偏口语化解释.部分不精准,仅理解含义即可.
单一职责原则
- 原理:(专注如一)一个类仅有一个一起变化的原因.
- 作用:避免过多的职责耦合在一起.减少变化发生时,设计受到的意外破坏.
- 例子:
- 正例:相机仅拍照,坏了仅影响拍照.
- 反例:手机功能多,电池突然坏了.打电话,拍照,付款,借钱等等都受到影响.
开放-封闭原则
- 原理:(别改我代码,自己写脚本去)软件实体(类,模块,函数等)可以扩展,但不能修改.
- 作用:对新功能/新需求,通过增加新代码,而不是改动已有代码.不是完全不能改,而是尽量少改动,提前预判,对频繁变化的部分抽象.
- 例子:
- 正例:主机,各模块负责自己的功能,内存不够加内存,硬盘没空间加硬盘.
- 反例:十几个功能模块写进一个函数里.一个函数方法几千行代码,谁会想去阅读,去维护.
依赖倒置原则
- 原理:
- (针对接口编程,而不是实现)高层模块不应该依赖低层模块。两个都应该依赖抽象
- 抽象不应该依赖细节,细节应该依赖抽象
- 作用:高层和底层模块若都是针对接口编程.那么只要接口稳定,其他的改了不必担心受影响.
- 例子:
- 正例:CPU,内存条,显卡都是对主板接口编程.某样东西坏了,不影响主板上其他的使用.注:内存条,显卡的插口槽样式固定的,无论哪家产的都能插上去.
- 反例:我家门锁坏了.锁芯不是通用版的(好像是老版或者对应的定制版),只能把整个锁及周边都换了艹.
里氏替换原则 (LSP)
- 原理:(子承父业)子类型必须能替换掉它们的父类型,
- 作用:
- 由于子类型的可替换性才使得父类类型的模块在无需修改的情况下可以扩展,使得子类能在父类基础上增加新行为.
- 接口也是遵循里氏替换原则,所以可以用接口容器装对象.可以实现 装载各种毫无关系但是却有相同行为的对象
- 例子:
- 正例:猫和牛羊狗猪都有吃喝跑叫等行为,可以继承统一的动物类.
- 反例:在面向对象设计时,一个是鸟类,一个是企鹅类,如果鸟是可以飞的,企鹅不会飞,那么企鹅是鸟吗?企鹅可以继承鸟这个类吗?
不能算.不能继承.
迪米特法则(最少知道原则)
- 原理:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
- 作用:降低类之间的耦合度。
合成/聚合复用原则
- 原理:尽量使用合成/聚合的方式,而不是使用继承。
- 作用:优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物
- 例子:
- 正例:合成/聚合复用原则
- 反例:大量使用继承.继承是一种强耦合的结构。父类变,子类就必须要变。
设计模式之间的关系
UML图说明
+表示public
-表示private
#表示protected
接口有两种表现方法:
第一种,顶端<> 标注,第一行接口名,第二行接口方法
第二种,棒棒糖表示法,圆旁接口名,接口方法在实现类中出现.
interface ILanguage { void Speak (); }
继承关系:空心三角形+实线
实现接口:空心三角形+虚线
关联关系:实线(类中引用对应对象) ——企鹅和气候
聚合关系:空心菱形+实线箭头 (聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分) ——大雁和雁群
合成关系:实心菱形+实线箭头 (合成(Composition,也有翻译成‘组合’的)是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样) ——鸟和翅膀
注:1和2为基数,表示这一段的类有几个实例.无数可以用n表示.关联关系和聚合关系也可以有基数.
依赖关系:虚线箭头 ——动物新陈代谢依赖氧气和水.
abstract class Animal { public Metabolism (Oxygen oxygen,Water water) { } }
推荐资料
<<大话设计模式>>
原因:描写生动形象贴近生活中案例,将抽象内容更形象化表达,适合入门及掌握.为本人学习时参考使用.
<<大话设计模式>>百度介绍链接
<<Head First 设计模式>>
原因:HeadFirst系列,基础,入门,详细,厚.
<<Head First 设计模式>>百度介绍链接
总结
保持饥饿,保持愚蠢.
这世界唯一能够相信的就是你付出的努力和你走过的路.