〇、设计模式概述

1. 什么是设计模式

设计模式(Design Pattern)是指在软件开发中,经过验证的,用于解决特定环境下、重复出现的、特定问题的解决方案

2. 设计模式的目的

  1. 提高代码的可读性(规范)
  2. 提高代码的重用性(相同功能的代码,不用重复编码)
  3. 提高代码的可扩展性(需要新增新的功能时,非常方便)
  4. 提高代码的可靠性(增减功能时,对原有功能没有影响)
  5. 使程序呈现高内聚,低耦合的特性

2. 设计模式的组成

  • 模式名称
  • 问题场景
  • 解决方案
  • 最终效果

3. 设计模式的七大原则

(1)一职责原则(Single Responsiblity Principle SRP)
  • 定义:一个类,一个方法只去完成一件事情;此原则的核心就是解耦和增强内聚性
  • 注意事项和细节
  1. 降低类的复杂度,一个类只负责一项职责
  2. 提高类的可读性,可维护性
  3. 降低业务需求变更带来的风险
  4. 在开发的过程中,要遵守单一职责原则;
(2)接口隔离原则(Interface Segregation Principle,ISP)
  • 定义:客户端不应该使用不需要的接口,接口的设计尽量独立
(3)依赖倒转(倒置)原则(Dependency Inversion Principle,DIP)
  • 定义:程序要依赖于抽象接口,不要依赖于具体实现;即要求对抽象进行编程,不要对实现进行编程,以降低耦合
  1. 高层模块不应该依赖底层模块,两者应该依赖其抽象
  2. 抽象不应该依赖细节,细节应该依赖其抽象
  3. 依赖倒转(倒置)的中心思想是面向接口编程
  4. 依赖倒转原则基于这样的设计理念:相对于细节的多变性,抽象的东西相对更加稳定;以抽象为基础构建的架构要更加稳定
  5. 使用接口的目的是制定好规范,而不涉及任何的细节实现;具体的细节交由实现类实现
  • 依赖关系传递的三种方式
  1. 接口
  2. 构造方法
  3. setter方法
  • 依赖倒转原则的注意事项和细节
  1. 底层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
  2. 变量的声明类型尽量使用抽象类或接口,这样变量引用和实际对象之间,就存在一个缓冲层,有利于程序扩展和优化
  3. 继承时遵循里氏替换原则
(4)里氏代换原则(Liskov Substitution Principle,LSP)
  • 定义:任何基类可以出现的地方,子类一定可以出现;即在设计一个子类的时候,子类可以完全去替换父类,而程序不会受到影响,子类也能够在父类的基础上扩展功能
  • 说明
  1. 在使用继承时,尽量不要重写父类的方法
  2. 里氏替换原则告诉我们,继承实际上使两个类之间的耦合性增强了;可以考虑通过组合,聚合,依赖的方式来解决问题
(5)开闭原则(Open Closed Principle,OCP)
  • 基本介绍
  1. 开闭原则是编程中最基础,最重要的设计原则
  2. 一个软件,比如其中的实体类,模块,函数应该对扩展开放(对提供方),对修改关闭(对使用方);用抽象构建框架,用实现扩展细节
  3. 当软件需要变化时尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化
  4. 编程中遵循寻其他原则,以及使用设计模式的目的就是遵循开闭原则
(6)迪米特法则(Law of Demeter)或最小知识原则(Principle of Least Knowledge,PLK)
  • 基本介绍
  1. 一个对象应该对其他对象保持最少的了解
  2. 类与类之间关系越密切,耦合度越大
  3. 迪米特法则又叫最少知道原则,,即一个类对自己依赖的类知道的越少越好;也就是说,被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部,对外提供public方法
  4. 迪米特法则还有个更简单的定义:只与直接的朋友通信
  5. 直接的朋友:如果两个类之间有耦合关系,就说这两个类之间是朋友关系;耦合的方式有很多:组合,聚合,依赖,关联等;其中,出现在方法变量,类的成员变量,方法返回值中的类称为直接朋友,出现在方法内部的局部变量则不是直接朋友;换句话说,陌生的类最好不要以局部变量的形式出现在类的内部
  • 注意事项和细节
  1. 迪米特法则的核心是降低类之间的耦合
  2. 迪米特法则只是要求降低类之间的耦合关系,并不是要求完全没有依赖关系
(7)合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)

要尽量使用合成/聚合,而不是使用继承

4. 设计模式的核心思想

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

二、UML

1)概述

UML(Unified Modeling Language)统一建模语言,是一种软件系统分析和设计的语言工具

2)UML图分类

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

3)UML类图

  • 虚线箭头指向依赖;
  • 实线箭头指向关联;
  • 虚线三角指向接口;
  • 实线三角指向父类;
  • 空心菱形能分离而独立存在,是聚合;
  • 实心菱形精密关联不可分,是组合;

在这里插入图片描述

4)类之间的关系

![图片引用自其它博客](https://img-blog.csdnimg.cn/20200805183234483.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0tKR01hbg==,size_16,color_FFFFFF,t_70)

  • 依赖:类中使用了其他类
  1. 类的成员变量
  2. 方法返回值
  3. 方法的参数
  4. 方法内部使用
  • 泛化:实际上就是继承(依赖关系的特例)
  • 实现:接口与实现类之间的关系
  • 关联:
  • 组合:部分与整体的关系(具有较强的关联)
  • 聚合:个体与整体的关系(具有较弱的关联)

三、设计模式的类型

根据GOF设计模式在《Design Patterns - Elements of Reusable Object-Oriented Software》(设计模式 - 可复用的面向对象软件元素)提出的23种设计模式,这些模式分为三大类:创建型模式(Creational Patterns),结构型模式(Structural Patterns),行为型模式(Behavioral Patterns);当然还有其他的设计模式,比如:J2EE设计模式

模式 & 描述包括
创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
  • 工厂模式(Factory Pattern)
  • 抽象工厂模式(Abstract Factory Pattern)
  • 单例模式(Singleton Pattern)
  • 建造者模式(Builder Pattern)
  • 原型模式(Prototype Pattern)
结构型模式
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 过滤器模式(Filter、Criteria Pattern)
  • 组合模式(Composite Pattern)
  • 装饰器模式(Decorator Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  • 代理模式(Proxy Pattern)
行为型模式
这些设计模式特别关注对象之间的通信。
  • 责任链模式(Chain of Responsibility Pattern)
  • 命令模式(Command Pattern)
  • 解释器模式(Interpreter Pattern)
  • 迭代器模式(Iterator Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 观察者模式(Observer Pattern)
  • 状态模式(State Pattern)
  • 空对象模式(Null Object Pattern)
  • 策略模式(Strategy Pattern)
  • 模板模式(Template Pattern)
  • 访问者模式(Visitor Pattern)
J2EE 模式
这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。
  • MVC 模式(MVC Pattern)
  • 业务代表模式(Business Delegate Pattern)
  • 组合实体模式(Composite Entity Pattern)
  • 数据访问对象模式(Data Access Object Pattern)
  • 前端控制器模式(Front Controller Pattern)
  • 拦截过滤器模式(Intercepting Filter Pattern)
  • 服务定位器模式(Service Locator Pattern)
  • 传输对象模式(Transfer Object Pattern)

参考

【1】Java设计模式:23种设计模式全面解析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值