我理解的23种设计模式
Posted t-mac-forever-1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我理解的23种设计模式相关的知识,希望对你有一定的参考价值。
(之前学过、后来在实际开发中也用过很多设计模式,但是常用的就那几种,总感觉没学透。最近又抽空把设计模式重新梳理了一遍,感觉比起当初又有了些新的理解,所以大概的记录了一下,也许有的地方理解有偏差,后期再慢慢修正吧~)
设计模式应遵循的七种原则
- 单一职责原则(类的功能职责应该独立,减少耦合)
- 开放关闭原则(对扩展开放,对修改关闭)
- 里氏替代原则(子类能完全替代父类,且不影响正常运行)
- 依赖倒置原则(细节应依赖抽象而不是抽象依赖细节,即面向接口编程)
- 接口隔离原则(不要让一个接口承担太多职责,应合理分配接口,避免接口臃肿和接口污染)
- 合成复用原则(类之间的复用尽量采用合成聚合的方式,减少继承;Has-A和Is-A的问题)
- 迪米特原则(也叫最少知识原则,尽量和“熟人”对话而不要与“陌生人”对话)
23种设计模式
(有人说是24种设计模式,但其实简单工厂模式不算,所以严格来说就23种而已)
创建型模式(5种)
- 单例模式(私有化构造函数,提供全局的对象访问点,用于频繁创建和销毁的资源,如数据库连接对象)
- 工厂模式(定义一个创建对象的工厂接口,让子类去决定它自己要实例化哪个产品,注重“单个对象”)(专卖店)
- 抽象工厂模式(提供一个创建一系列有关联(相关或依赖)的产品的接口,使得客户端可以在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象,注重“系列对象”)(小饭馆:包子、稀饭、面啥子都卖)
- 建造者模式(将一个产品的内部表示与产品的构造过程分割开来,从而可以使一个建造过程生成具体不同的内部表示的产品对象。强调的是产品的构造过程)(豆花、豆腐、豆腐干)
- 原型模式 (通过给出一个原型对象来指明所要创建的对象类型,然后用复制的方法来创建出更多的同类型对象,即克隆)(MemberwiseClone()浅拷贝,DeepClone()深拷贝)(作业做好了,拿去抄吧)
结构型模式(7种)
- 适配器模式(把原本不兼容的接口包装一下再提供给调用者)
- 外观模式(给多个子系统提供一个一致的接口,隐藏后面的具体细节操作,简化调用;类似登录界面)
- 桥接模式(把抽象部分和实现部分进行剥离,让它可以独立地变化,以完成不同维度的扩展)
- 代理模式(给某对象提供一个代理,让代理对象控制该对象的访问)
- 装饰者模式(把原对象进行二次包装,增加些新功能)
- 组合模式(又叫部分-整体模式,将对象组合成树形结构以表示“部分-整体”的层次结构)
- 享元模式(运用内部共享技术,有效的支持对象的存储优化,比如线程池)
行为模式(11种)
- 策略模式(一个类的行为或算法可以在运行时进行更改,定义一系列的算法,把它们一个个封装起来,使得它们可以相互替换)(比如结算工资时都要扣社保公积金所得税什么的,而国企、外企、私企交的比例和基数又不一样,但是它们的计算中的算法就可以提取成一种策略)(个人感觉和状态模式有点类似,都是根据不同的情形改变一些行为的,只不过状态模式侧重自身行为属性的改变,而策略模式侧重算法)
- 观察者模式(多个观察者监听一个对象,当对象发生变化时会通知所有观察者,比如订阅新闻)
- 状态模式(允许对象在自身状态发生改变时可以有不同的行为)(可以把当前对象this当做参数传递)
- 解释器模式(定义一种新语言,同时定义一个解释器,解释器负责翻译该语言。应用较少,比如SQL解析器)
- 迭代器模式(为集合类数据提供顺序访问和操作的接口,同时又不暴露该集合内部的具体情况)
- 模板方法模式(定义一个算法的骨架或提纲,由子类去选择重写或者复用)(比如定好炒菜的大概步骤,由中餐厨师和西餐厨师自己选择要实现哪些步骤)
- 命令模式(把一个请求或操作封装到一个对象中,通过对命令的抽象化来使得发出命令的责任和执行命令的责任分隔开。命令模式的实现可以提供命令的撤销和恢复功能)(一个只管下命令,另一个只管找合适的方法去执行命令;比如你去旅行社说要去度假,另一个人会自己根据你的行程、目的地和预算为你安排不同的出行方式,一个包含行程天数、目的地、预算等细节的对象就可以看做是一个命令)
- 中介者模式(定义一个中介对象来封装一系列的对象交互,使各个对象间不用显式的相互引用,而且又可以独立的改变它们之间的交互细节)(MVC种的C就是M和V之间的中介)
- 责任链模式(一个链式的设计使得多个对象都能处理请求,从而避免发送者和接受者之间的耦合)(比如你提辞职流程的时候...)
- 访问者模式(把数据的操作方法封装进数据结构中,在传递数据的时候也可以传递处理方法,用于数据结构比较稳定的系统)(捐菜的同时也把菜谱放箱子里@武汉 哈哈哈哈)
- 备忘录模式(在不破坏封装的前提下,捕获一个对象的内部状态,以后就可以用这个去恢复对象,感觉像虚拟机的快照功能)
以上是关于我理解的23种设计模式的主要内容,如果未能解决你的问题,请参考以下文章