Skip to content

设计模式-纲领篇

About 891 wordsAbout 3 min

设计模式设计原则

2024-04-29

在经历了很多次学习,很多次放弃,就在现在开始另外一次的学习放弃设计模式的过程。

对于设计模式的实现上面是不依赖于编程语言的,设计模式是一个思想。

参考文章: Java之美[从菜鸟到高手演变]之设计模式

一、设计模式的分类

总体来说设计模式分为三大类

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式

行为型模式,共十一种:策略模式、模版方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

二、设计模式的六大原则

1、开闭原则

简单来说就是:对扩展开放,对修改关闭

在程序需要进行拓展的时候,不能修改原有的代码,实现一个热插拔的效果。为了使程序的扩展性好,易于维护和升级,我们使用接口和抽象类。

2、里氏替换原则

里氏替换原则是面向对象设计的基本原则之一。任何基类可以出现的地方,子类一定可以出现。只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能正真的被复用,而衍生类也能够在积累的基础上增加新的行为。里氏替换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的集体实现。

20241114补充

细说 里氏替换原则

补充对定义的理解:作者:liskov, 就是说继承必须确保超类所拥有的性质在子类中仍然成立;子类可以扩展父类的方法,但是不能修改父类的方法,比如我们用java的List来举例说明,一个类继承List, 重写get方法,当传入的index大于列表的大小的时候, 我应该抛出IndexOutOfBoundException, 不应该有其他的动作。

ArrayList
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable{
	   public E get(int index) {
        rangeCheck(index);
        return elementData(index);
    }
    private void rangeCheck(int index) {
        if (index >= size)
          	// ArrayList的源代码抛出IndexOutOfBoundExection错误
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }
}

3、依赖倒转原则

这个是开闭原则的基础,具体内容是:针对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则

使用多个隔离的接口,比使用单个接口要好。降低类之间的耦合度的意思。

5、迪米特法则(最少知道原则)

一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则

原则是尽量使用合成/聚合的方法,而不是使用继承。

Changelog

Last Updated: View All Changelog
  • feat(wiki): hammeSpoon: 复制出来的文件需要重新生成永链

    On 3/27/25

求求了,快滚去学习!!!

求求了求求了,快去学习吧!

【题单】贪心算法

不知道方向的时候,可以多看看书,书会给你指明下一步该干什么,加油!