java设计模式-深度讲解

一.什么是设计模式

1.概念:在编写软件的过程中,程序员面临来自,耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性,等多方面的挑战,而设计模式就是为了让程序(软件)具有更好的:

(1).代码重用性:(即:相同功能的代码,不用多次编写)
(2).代码可读性:(即:编程规范性,便于其他程序员的阅读和理解)
(3).可扩展性:(即:当需要增加新的功能时候,非常的方便,也称为可维护性)
(4).可以靠性(即:当我们增加新的功能后,对原有的功能没有影响)
(5).使程序呈现低耦合,高内聚的特性(即:高内聚->模块内部呈现高内聚,依赖非常紧密;低耦合->模块和模块之间呈现低耦合,依赖非常松懈)
复制代码

2.设计模式的七大原则

(1).单一职则原则:对类来说的,即一个类应该只负责一项职责,如UserDao类,只负责对用户的crud,
    OrderDao,只负责对订单的crud,这就是单一职责原则;
    <1>.单一职责的原则以及注意事项:
       a.降低类的复杂度,一个类只负责一项职责
       b.提高类的可读性,可维护性
       c.降低变更引起的风险
       d.通常情况下我们应该遵守单一原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;
         只有当类中的方法数量足够少,可以在方法级别保持单一职责原则

(2).接口隔离原则:
     基本介绍:
      <1>.客户端不应该依赖于他不需要的接口,即,一个类对另一个类的依赖应该建立在最小接口上
      <2>.错误
复制代码

      <3>.正确
复制代码

(3).依赖倒转原则:
     <1>.高层模块不应该依赖于底层模块,二者东应该依赖于抽象
     <2>.抽象不应该依赖于细节,细节应该依赖于抽象
     <3>.依赖倒转(倒置)中的思想是面向接口编程
     <4>.依赖倒置基于这样的设计理念:相对于细节的多边性,抽象的东西要稳定的多。
         在java中抽象指的是接口或者抽象类细节就是具体的实现类
     <5>.使用接口或者抽象类的目的是制定好的规范,而不是设计到具体操作,把展现细节的东西交给子类去实现 
     <6>.依赖关系传递的三种方式:
         a.接口传递
         b.构造器传递
         c.set方法传递
     <7>.依赖倒转原则总结
         a.底层模块尽量都要有抽象类或者接口,或者两者都有,程序稳定性更好
         b.变量声明尽量是抽象类或者接口,这样我们变量引用和实际对象间,就存在一个缓冲层,利于层序
           的扩展和优化
         c.继承时遵循里氏替换原则
(4).里氏替换原则:
     概念:里氏替换原则是针对继承而言的
     <1>.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
     <2>.子类可以增加自己特有的方法
     <3>.当子类的方法重载父类的方法时,方法的形参要比父类方法的输入参数更宽松
     <4>.当子类的方法实现父类的抽象方法时,方法的返回值应比父类更严格
(5).开闭原则
     <1>.开闭原则是编程中最基础,最重要的设计原则
     <2>.一个软件实体如类,模块和函数应该对外开放(提供方),对修改关闭(使用方),用抽象构造框架,
         用实现扩展细节
     <3>.当软件需要变化的时候,尽量通过扩展软件实体行为来实现变化,而不是修改已有的代码来实现变化
     <4>.编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则
(6).迪米特法则
     <1>.一个对象应该对其他对象保持最少的了解
     <2>.类与类之间关系越密切,耦合度越大
     <3>.迪米特法则又叫最少知道法则,即一个类对自己的依赖类知道的越少越也就是说对被依赖类不管多
         么的复杂,都尽量把逻辑封装在类的内部,对外除了提供public方法,不对外泄露任何消息
    <4>.迪米特法则还有更简单的定义,只与直接朋友通信
    <5>.每个对象都会与其他对象有耦合关系,只要这两个对象有耦合关系,我们就说这两个对象之间
        是朋友关系,耦合的方式很多:依赖,关联,组合,聚合等。其中,我们称出现在成员变量,方法参数,
        返回值中的类称为直接朋友,而出现在局部变量里的类不是直接朋友,也就是说陌生的类最好不要以
        局部变量的形式出现在类的内部。
(7).合成复用原则
       尽量使用合成/聚合的方式,而不是继承
复制代码

3.设计原则的核心思想

(1).找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混合在一起
(2).针对接口编程,而不是针对实现编程
(3).巍峨了交互对象之间的松耦合度而设计
复制代码

4.uml类图

5.类的六大关系

(1).依赖:一个类中用到了另一个类的对象,这种关系叫做依赖关系
(2).泛化(继承):一个类继承另一个类,他是依赖关系的特列
(3).实现:一个类实现一个接口,他是依赖关系的特列
(4).关联:关联关系实际上就是类与类之间的联系,他是依赖关系的特列,关联具有导航性,即双向关系或者
    单向关系,关系还具有多重性
(5).聚合:表示整体和部分的关系,整体和部分可以分开。聚合关系是关联关系的特列,所以他具有关联关系的
    导航性和多重性
(6).组合:表示整体和部分的关系,整体和部分是不可以分开。聚合关系是关联关系的特列,所以他具有关联
    关系的导航性和多重性
复制代码

猜你喜欢

转载自juejin.im/post/5eac4e4d5188256d8d605f21