设计模式一本通

UML关系符号:

PS:
1、以上顺序,关系由强到弱,其中依赖关系最弱应该放在最后,上图有误。
2、为方便记忆,分为箭头、箭尾和线型。

继承:is-a
组合:contains-a,也是关联关系的一种特例,比聚合更强,也称为强聚合。
聚合:has-a,是关联关系的一种特例,他体现的是整体与部分、拥有的关系。在代码层面,组合、聚合和关联关系是一致的,只能从语义级别来区分。
关联(Association):knows-a,类与类之间的连接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。Java中,关联关系一般使用成员变量实现。
依赖(Dependency):uses-a,最弱的关系,类与类之间的连接。Java中,体现为局部变量、方法的形参,或者对静态方法的调用。
参考:重新认识java(四) — 组合、聚合与继承的爱恨情仇_mystery的博客-CSDN博客_java 继承和聚合

设计模式主要是基于以下的面向对象设计原则:
对接口编程而不是对实现编程。
优先使用对象组合而不是继承。

设计模式六大原则:
1、开闭原则(Open Close Principle)
对扩展开放,对修改关闭。尽量使用接口和抽象类,实现热插拔的效果。
2、里氏替换原则(Liskov Substitution Principle)
任何基类可以出现的地方,子类一定可以出现。
3、依赖倒置原则(Dependence Inversion Principle)
针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)
使用多个隔离的接口,比使用单个接口要好。降低类之间的耦合度。
5、迪米特法则(Demeter Principle)
又称最少知道原则,一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle)
尽量使用合成/聚合的方式,而不是使用继承。
还有五大甚至七大原则的叫法,SOLID原则(单一职责、开闭原则、里氏替换、接口隔离、依赖倒置)。
参考:设计模式简介 | 菜鸟教程 (runoob.com)

常用设计模式:
1、创建型
1)简单工厂模式(违背开闭原则)、工厂方法模式(是对简单工厂的抽象,在不修改原来工厂代码的前提下,引进新产品)、抽象工厂模式
2)单例
3)建造者:将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。


2、结构型:
1)适配器:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式两种,前者(继承)类之间的耦合度比后者(关联)高,所以后者用的更多。

2)装饰器:在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。


3)代理:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

4)桥接、
5)享元:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。需要抽象出内部状态和外部状态。

6)门面
3、行为型
1)观察者:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

2)责任链:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

3)模板:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

4)策略、状态、命令
参考:适配器模式(Adapter模式)详解 (biancheng.net)

适配器模式 vs 代理模式
适配器是接口的适配,A接口转换成B接口;代理模式是对象的代理,提供一个对象的代理对象。
参考:适配器模式和代理模式的区别_qq_43397715的博客-CSDN博客_适配器模式和代理模式的区别

代理模式 vs 装饰器模式
装饰模式是为装饰的对象增强功能;而代理模式对代理的对象施加控制,但不对对象本身的功能进行增强。

策略模式 vs 工厂模式
没搞明白。

附:
java IO采用的设计模式:适配器、装饰器。
spring框架采用的设计模式:简单工厂、工厂方法、单例、适配器、装饰器、代理(如AOP,Aspect Oriented Programming)、观察者、策略、模板方法、责任链(如拦截器)。
参考:Spring中涉及的设计模式总结_iCoding91-CSDN博客_spring中的设计模式Spring 引用的7种设计模式 - 简书 (jianshu.com)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值