软件设计模式知识点学习笔记
2022-10-26 15:46:50 0 举报
AI智能生成
软件设计模式知识点学习笔记
作者其他创作
大纲/内容
对软件设计中反复出现的各种问题,所提出的解决方案
是什么
在java中,抽象指的是接口或抽象类,细节就是具体的实现类
注意事项
重用性 (即:相同功能的代码,不用多次编写)
可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)
可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)
作用
一个类只负责一个功能的职责
单一职责原则(Single Responsibility Principle)
对扩展开放,对修改关闭
开闭原则(Open Close Principle)
任何父类可以出现的地方,子类一定可以代换
里氏代换原则(Liskov Substitution Principle)
针对接口编程,依赖于抽象而不依赖于具体实现
依赖倒转原则(Dependence Inversion Principle)
使用多个隔离的接口,比使用单个接口要好
接口隔离原则(Interface Segregation Principle)
尽量使用合成/聚合的方式,而不是使用继承
合成复用原则(Composite Reuse Principle)
一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立
迪米特法则,又称最少知道原则(Demeter Principle)
七大原则
一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果
定义
描述类以及类与类之间的关系,通过该图可以快速了解系统
类图(class diagram)
用来捕获需求,描述系统的功能,通过该图可以迅速的了解系统的功能模块及其关系
用例图(use case diagram)
描述执行特定任务时对象之间的交互关系以及执行顺序,通过该图可以了解对象能接收的消息也就是说对象能够向外界提供的服务
时序图(sequencediagram)
协作图(collaboration diagram)
状态图(statechart diagram)
活动图(activity diagram)
构件图(component diagram)
部署图(deploymentdiagram)
分类
UML
保证一个类仅有一个实例,并提供一个访问它的全局访问点
推荐使用
饿汉式(静态常量)
饿汉式(静态代码块)
懒汉式(线程不安全)
懒汉式(线程安全,同步方法)
懒汉式(线程安全,同步代码块)
双重检查
静态内部类
枚举
8种写法
spring bean默认为单例模式
实例
单例模式Singleton
定义一个用于创建产品的接口,由子类决定生产什么产品。
工厂方式Factory
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
抽象工厂模式AbstractFactory
将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。
StringBuilder
jdk实例
建造者模式Builder
将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例
对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝
浅拷贝
对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容
深拷贝
实现
spring prototye模式创建bean
原型模式Prototype
创建型
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
java.util.Arrays#asList()
java.io.InputStreamReader(InputStream)
java.io.OutputStreamWriter(OutputStream)
适配器模式Adapter
将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性
java.util.Map#putAll(Map)
java.util.List#addAll(Collection)
组合模式Composite
将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度
JDBC
桥接模式Bridge
为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问
外观模式Facade
运用共享技术来有效地支持大量细粒度对象的复用
单例只会有一个实体, 但是享元类可以有多个实体, 各实体的内在状态也可以不同。<br>
单例对象可以是可变的。 享元对象是不可变的。
与单例区别
缓存
应用
池技术:String常量池、数据库连接池、缓冲池等等都是享元模式的应用,享元模式是池技术的重要实现方式
经典的应用场景
java.lang.Integer#valueOf(int)
jdk示例
享元模式Flyweight
动态的给对象增加一些职责,即增加其额外的功能
java.io.BufferedInputStream(InputStream)
java.io.DataInputStream(InputStream)
java.io.BufferedOutputStream(OutputStream)
装饰模式Decorator
为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性
静态代理
JDK代理、接口代理
Cglib代理
动态代理
代理方式
Spring AOP底层实现
代理模式Proxy
结构型
每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
责任链模式Chain of Responsibility
将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开
命令模式Command
提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示
迭代器模式Iterator
定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解
中介者模式Mediator
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态
保存某个时间段的快照(List<History>),然后恢复
1、后悔药。 2、打游戏时的存档。 3、Windows 里的 ctri + z。 4、IE 中的后退。 4、数据库的事务管理。
应用实例
备忘录模式Memento
定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤
模板方法将算法分解为步骤, 并允许子类重写这些步骤, 而非重写实际的模板方法。
通俗理解
模板模式TemplateMethod
提供如何定义语言的文法,以及对语言句子的解释方法,即解释器
通过解释器来实现四则运算,如计算a+b-c的值
解释器模式Interpreter
多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为
观察者模式Observer
允许一个对象在其内部状态发生改变时改变其行为能力
状态模式State
定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户
策略模式Strategy
在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问
访问者模式Visitor
行为型
软件设计模式知识点学习笔记
0 条评论
下一页