• 设计模式入门


    一、设计模式

    1、什么是设计模式

      设计模式是一套被反复使用、多数人知晓、代码设计经验的总结。

    2、目的

      设计模式的目的是为了让软件具有更好的代码重用性、可读性、可扩展性、可靠性,同时使程序间出现高内聚、低耦合的特性。

    3、七大原则

    (1)单一职责原则(Single-Responsibilitiy Principle(SRP))。
      简单的说就是 对于一个类A,其只负责某项职责(功能),并不是指一个类只有一个方法。
      比如某个人,其兼职了几个不同的工作,按照单一职责原则,每个工作应该都由一个专门的人来完成。

    (2)接口隔离原则(Interface Segregation Principle(ISR))。
      简单的说就是 对于一个类A,不应该依赖于不需要的接口,即类间的依赖关系需建立在最小的接口上。
      比如,一个接口里面有10个抽象方法,当类A需要使用某个方法时,需要实现该接口,并重写10个方法。此时其余的9个方法,类A并不需要,按照接口隔离原则,可以将这个方法单独的抽出来写成一个接口B,然后让类A去实现接口B,此时类A只需重写一个方法即可。

    (3)依赖倒置(倒转)原则(Dependence Inversion Principle(DIP))。
      简单的讲 依赖倒置原则的中心思想是面向接口编程,高层模块不依赖与低层模块,且二者均依赖于抽象,其抽象不依赖于细节,应该细节依赖于抽象。
      其中:
        抽象指的是 接口 或者 抽象类, 细节指的是 具体的实现类。

    【举例:普通的写法】
    class Teacher{
    }
    
    class Hospital{
        // 高层依赖于低层
        public void check(Teacher teacher){ // 采用具体的实现类,只能传入Teacher类的实例
        }
    }
    
    【举例:面向接口编程】
    interface Person{
    }
    
    class Teacher implements Person{
    }
    
    class Doctor implements Person{
    }
    
    class Hospital{
        // 高层不依赖于低层,而依赖于抽象
        public void check(Person person){ // 采用接口,方便复用,可以传入Teacher类或Doctor类的实例
        }
    }

    (4)里氏替换原则(Liskov Substitution Principle(LSP))。
      简单的讲就是 任何父类能出现的地方,子类一定能出现,且子类可以扩展父类的功能,但是不能改变父类原有的功能。即继承时尽量不要重写父类的方法。
      比如一个父类A,子类B,且子类B重写了父类A的某个方法,在一个类C中需要使用父类A的方法时,若此时传入的是子类B,则程序可能会出错。

    (5)开闭原则(Open-Close Principle(OCP),核心原则)。
      简单的讲就是 软件对扩展开放(代码提供方),对修改关闭(代码使用方),即对代码功能进行扩展时,不能修改原有代码。使用抽象类与接口对代码进行重构,当扩展代码功能时,实现抽象类或接口并实现相关方法即可。

    (6)迪米特法则(Law of Demeter(LOD))。
      又称为最小知道法则(Least Knowledge Principle (LKP))
      简单的说就是 一个实体应尽量少的与其他实体之间发生相互作用(降低耦合),使系统功能模块相互独立。一个对象应该对其他对象有最少的了解,即不管你内部有多复杂,我能调用你的方法就行。
      比如:一个类A的某个方法中出现某个类B,且对类B做了一些无关类A的操作,按照迪米特法则,需要将这些操作封装在类B的一个方法中,然后在类A中调用该方法。

    (7)合成复用原则。
      简单的说就是 尽量使用合成或者聚合的方式,少用继承。

    4、常用设计模式分类(23种)

    (1)三大类:

      创建型模式(五种),

      结构型模式(七种),

      行为型模式(十一种)
    (2)创建型模式:(强调对象创建时,如何去更好的设计)
      工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式。

    (3)结构型模式:(设计更好的软件结构)
      适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。

    (4)行为型模式:(设计更好的方法调用模式)
      策略模式,模板方法模式,观察者模式,迭代器模式,责任链(职责链)模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式。

    二、UML图

    1、什么是UML图

    (1) Unified Modeling Language,统一建模语言,用来对软件密集系统进行可视化建模的一种语言。简单的说就是 帮助软件开发人员记录、交流的一个图形化语言。
    (2)UML图本身是一组符号的规定,用于描述软件模型间各元素以及各元素间的联系。

    2、UML分类

    (1)用例图
    (2)静态结构图:类图,对象图,包图,组件图,部署图。
    (3)动态行为图:交互图(时序图、协作图)、状态图、活动图。

    3、类图(常用)

    (1)用于描述类与类之间的关系。UML的核心。
    (2)元素:类、接口。
    (3)关系:依赖、继承(泛化)、实现、关联、聚合、组合等。
    (4)依赖:
      若在某个类A中使用到类B,且若没有类B,类A编译会报错,则称A与B之间有依赖关系。
      线条表示:虚线普通箭头("<",">")。
    (5)继承(泛化):
      属于依赖关系的一种特例,如果类A继承了类B,则称A与B间存在泛化关系。
      线条表示:实线空心三角箭头。
    (6)实现:
      属于依赖关系的一种特例,如果类A实现了类B,则称A与B间存在实现关系。
      线条表示:虚线空心三角箭头。
    (7)关联:
      属于依赖关系的一种特例,如果类A与类B间有联系。比如类B作为类A的成员变量,则称A与B间存在关联关系。
      线条表示:实线(直线),普通箭头("<",">")可选。如果强调方向,则加一个普通箭头。否则只需要一条实线。
    (8)聚合:
      属于关联关系的一种特例,如果类A与类B间可以分离且可以独立存在,则称A与B间存在聚合关系。比如:人与衣服,可以分离,则为聚合关系。
      线条表示:实线空心菱形箭头。
    (9)组合:
      属于关联关系的一种特例,如果类A与类B间不可以分离,则称A与B间存在组合关系。比如:人与人头,不可分离,则为组合关系。
      线条表示:实线实心菱形箭头。

    注:
      eclipse下生成Java类图和时序图,生成UML图,参考地址: https://blog.csdn.net/qq_21383435/article/details/79890884

      在线编辑UML图的工具(ProcessOn):https://www.processon.com/

  • 相关阅读:
    各种排序
    最大子数组的和与积
    字符串距离
    二叉树的基本操作
    C++11创建线程的几种方式
    二分查找
    汉诺塔问题
    读写锁实现
    全排列
    数字转汉字
  • 原文地址:https://www.cnblogs.com/huoyz/p/14398555.html
Copyright © 2020-2023  润新知