设计模式总览——三大类型七大原则

457 阅读4分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战


哈喽,大家好,我是一条~

其实写这么久设计模式,我一直有个顾虑,会有人看吗,大多人都觉得设计模式没什么用吧,写还是不写这是一个值得思考的问题。

答案是写,必须写,而且要让同学们意识到设计模式的重要性,无论是读源码还是提升coding能力,设计模式都是必不可少。

其实我们每天编码都在用到设计模式,只不过大多数人没意识到,没理解。所以今天的内容就是总览设计模式——三大类型七大原则。

设计模式是一种思想,灵活运用思想远大于死记代码、咬文爵字。切记!!!

三大类型

我们知道设计模式足足23种之多,光记名字都记乱了,怎么办呢?

分完类型就好记多了。

  • 创建型模式:关注类或者对象的创建,比如单例、工厂、原型,属于比较简单的类型,共5种,可以先学这一部分。
  • 结构型模式:关注类或对象间的关系,组合优于继承。比如适配器,装饰器、组合等,共7种。
  • 行为型模式:关注组件的使用,即方法的调用,比如责任链、策略、观察者等,共11种。

可以参考下图:

image-20220206195517816

为什么组件的销毁没有设计模式呢,这是因为Java强大的垃圾回收机制帮我们做了。

在实际开发中,设计模式间并不是完全独立的,可以组合使用,也可以只使用其中的思想。总之,理解第一,灵活运用

七大原则

即软件设计的七大原则,软件工程专业的同学应该不会陌生。

这些原则都是前人总结的经验,对我们coding能力的提升有着指导作用,但也不可盲目追寻,拿设计模式来说,一个设计模式可能符合某个原则但又不符合其他原则,需根据业务场景灵活选择。

以下七个原则都会有一句通俗易懂的总结,请重点记忆。

  • 开闭原则(Open Closed Principle,OCP)

    软件实体应当对扩展开放,对修改关闭,合成复用原则、里氏替换原则相辅相成,都是开闭原则的具体实现。

    一句话理解:扩展新类而不是修改旧类

  • 里氏替换原则(Liskov Substitution Principle,LSP)

    继承必须确保超类所拥有的性质在子类中仍然成立。

    一句话理解:继承父类而不去改变父类

  • 依赖倒置原则(Dependence Inversion Principle,DIP)

    高层模块不应该依赖底层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。

    一句话理解:面向接口编程

  • 单一职责原则(Single Responsibility Principle,SRP)

    一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。

    一句话理解:每个类只干自己的活,不管别人的事。

  • 接口隔离原则(Interface Segregation Principle,ISP)

    一个类对另一个类的依赖应该建立在最小的接口上。

    一句话理解:各个类建立自己的专用接口,而不是建立万能接口

  • 迪米特法则(Law of Demeter,LoD) 亦称最少知道原则(Least Knowledge Principle,LKP)

    只与你的直接朋友交谈,不跟“陌生人”说话。

    一句话理解:无需直接交互的两个类,使用中间者,不关注其具体实现

  • 合成复用原则(Composite Reuse Principle,CRP)

    软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

    一句话理解:组合优于继承

    (什么是组合?简单说就是作为属性注入,而不是继承)

总结

ok,看到这可能还是有很多同学一头雾水,不慌,我已经更新了一部分设计模式的具体讲解,可以去学习啦!

设计模式合集