首页 > 其他分享 >常用设计模式总结,附完整图解

常用设计模式总结,附完整图解

时间:2024-06-02 20:11:25浏览次数:21  
标签:总结 图解 定义 原则 代码 list 模式 关联 设计模式

UML类图

类图定义规则

属性和方法前加上(+、-、#、留空)分别代表:公开(public)、私有(private)、保护(protected)、缺省(default)

方法括号内为参数类型,冒号后为返回值类型

下划线表示 静态(static),斜体表示 抽象(abstract)

 

类图关系表示法

其中 关联、聚合、组合,比较容易混淆,它们的区别:

关联:描述的是两个独立实体之间的连接,它们可以独立存在。

聚合:描述的是整体和部分之间的关系,部分可以独立于整体存在。

组合:描述的是一种更强的整体和部分关系,部分不能独立于整体存在。

依赖 和 关联 的主要区别在于:

依赖是临时性的,而关联是长期性的。

依赖关系通常表示一个类使用另一个类,而关联关系表示对象之间的结构关系。

 

七个原则

开闭原则

对扩展开放,对修改关闭。

即程序要设计成扩展新功能时,只需添加新代码,而无需修改现有代码。

 

里氏替换原则

子类可以当作父类使用,且替换后不改变运行结果。

 

单一职责原则

一个类只负责一个职责。

 

依赖倒转原则

高层模块不应该依赖底层模块,抽象不应该依赖于细节。

 

接口隔离原则

接口应该小而完备,避免大而臃肿。不因该强迫实现类实现不该有的功能。

 

合成复用原则

在代码复用时,优先使用组合、聚合、关联的方式,其次考虑继承方式。

组合、聚合、关联、继承的区别可参考上面《类图关系表示法》。

 

最少知道原则(别称:迪米特法则

一个类对于其他类知道的越少越好。

 

扩展:高内聚低耦合

要注意,下图是以类的角度。从方法的角度来看,方法之间互调频繁,也是耦合。

 

创建型

单例模式

1.饿汉式

缺点:类加载后立刻创建对象,较占资源。

 

2.懒汉式

优点:按需加载。

缺点:使用锁来保证并发安全,代码较复杂。

 

3.内部类式

优点:懒汉式改进版,使用JVM机制取代了锁,同样能保证并发安全的情况下,代码更简单了。

 

简单工厂模式

优点:客户和具体商品解耦。

缺点:工厂里硬编码所有商品,每次添加新商品需要修改工厂代码,违反开闭原则。

 

工厂方法模式

特点:添加新商品只需新建对应工厂,无需修改其他代码,符合开闭原则。

 

抽象工厂模式

特点:每个品牌工厂可以生产多种类型的商品。

 

建造者模式

定义:将一个对象的建造步骤、顺序、细节进行分离。

抽象建造者:定义构建产品的步骤。

具体建造者:实现每个步骤。

指挥者:决定步骤的执行顺序。

 

结构型

代理模式

定义:通过代理类来访问被代理类。


 

桥接模式

定义:将抽象与实现分离,使它们都可以独立地变化。


 

适配器模式

定义:通过包装,让类兼容特定接口。

 

装饰器模式

定义:通过包装,实现功能动态扩展。

 

行为型

观察者模式

定义:对象可以被订阅,并主动通知订阅者。

 

策略模式

定义:使策略能动态的切换。

 

模板方法模式

定义:将可变的方法延迟到子类实现。

 

状态模式

定义:把类功能按不同状态进行分离。

 

迭代器模式

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

 

责任链模式

定义:多个处理者按序连接,每个处理者决定是否处理请求、是否调用后序。

标签:总结,图解,定义,原则,代码,list,模式,关联,设计模式
From: https://www.cnblogs.com/yfeil/p/18216463

相关文章

  • PTA题目集4~6的总结性Blog
    一:前言:1.知识点总结:①:java面向对象类和对象的基本用法②:关联类,依赖类和组合等类间关系③:正则表达式的运用④:Comparator接口及比较器基本使用⑤:ArrayList的基本使用⑥:Collections.sort方法使用2.题量:较少,每次题目集不超过3题3.难度:由于题量少,所以每次题目集难度较大,......
  • Java题目集4~6的总结
    前言面向对象编程课程的“答题判题程序-4”作业是一个综合性的练习,旨在加深学生对面向对象编程思想的理解,并实际应用于解决复杂问题。本作业要求学生设计并实现一个答题程序,模拟小型测试的全过程,包括题目信息、试卷信息、答题信息、学生信息的输入,以及答题结果的判断和输出。家......
  • 20240602比赛总结
    T1等差子序列https://gxyzoj.com/d/hzoj/p/3638主要在枚举的方法上,要选小常数较小的方法30pts:枚举前两个数,然后算出第三个数的值,看位置是否满足条件100pts:上面的方法中,不是每组数都可以满足条件,可能会出现大于n或小于1的情况,但是却无法避免对它的的枚举,所以常数较大可以......
  • 南昌航空大学大一下学期java题目集4-6总结性Blog-苏礼顺23201608
    一、前言——总结三次题目集的知识点、题量、难度等情况 关于知识点  这次的三次题目集更加进一步体现了面向对象程序设计的思想方法。主要是之前的三次题目集就只是利用了面向对象三大基础特性中的封装特性,而这三次的题目集增加了继承与多态,这正是面向对象设计的精髓所......
  • 五类数据容器对比总结 知道喔!
    五类数据容器对比总结1.五类数据容器的区别·是否支持下标索引 ·支持:列表、元组、字符串---序列类型 ·不支持:集合、字典---非序列类型·是否支持重复元素  ·支持:列表、元组、字符串---序列类型 ·不支持:集合、字典---非序列类型·是否可以修改 ·支持:列表......
  • OOP课第二阶段总结
    OOP课第二阶段总结前言作为第二次3+1的总结,明显感受到了此次题目集越来越复杂,结合了实际的物理知识来解决现实中的电路问题。因为电路可以一直扩展下去,情况千变万化,难以像上次题目集一样找到一个呆板的做法。这次题目集,让很多人连题目都无法理解,代码也是无从下手,因为这些人......
  • Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式 (尼恩)电子版百度云
    书获取链接:python33  。c o  m我的阅读笔记:多线程:介绍Java多线程的基础概念,如线程的创建、启动、状态转换、线程间通信等。锁:深入探讨Java中的各种锁机制,包括内置锁(synchronized)、ReentrantLock、ReadWriteLock等,以及它们的使用场景和性能特点。Java内存模型(JMM):解释J......
  • 设计模式之原型模式
    问题背景在开发一个图形设计软件时,我们面临一个常见的需求:用户需要频繁地创建和编辑各种图形,如圆形、矩形和多边形。其中,许多图形元素在属性上非常相似,比如颜色、大小或样式可能只有细微的差别。用户希望能够快速复制一个已有图形,然后对其进行小的修改,而不是每次都从零开始......
  • 6.2 休息日 背包问题总结
    就目前所遇到的01背包与完全背包作总结。01背包有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。二维dp数组01背包动规五部曲1.确定dp数组以及下标的含义dp[i......
  • 图解SQL基础知识,小白也能看懂的SQL文章!
    本文介绍关系数据库的设计思想:在SQL中,一切皆关系。在计算机龄域有许多伟大的设计理念和思想,例如:在Unix中,一切皆文件。在面向对象的编程语言中,一切皆对象。关系数据库同样也有自己的设计思想:在SQL中,一切皆关系。关系模型(Relationalmodel)由E.F.Codd博士于1970年......