设计模式简介

设计模式概念

设计模式是解决常见软件设计问题的经验总结,可以看成是一本代码设计宝典,帮助开发人员更好地完成软件设计工作。

分类

1)创建型

提供创建对象的机制,提升已有代码的灵活性和可复用性。

单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式、原型模式

2)结构型

介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效

代理模式、桥接模式、装饰者模式、适配器模式、门面模式、组合模式、享元模式

3)行为型

负责对象间的高效沟通和职责传递委派

观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式、访问者模式、备忘录模式、命令模式、解释器模式、中介模式

设计模式原则

1)单一职责原则

一个类只负责一项职责,这样可以使得类更加可维护、可扩展、可重用。

举例:比如说一辆汽车的刹车踏板,它的作用就是让行进间的汽车停止的,如果现在这个刹车踏板的功能改成了,踩一半是油门,踩到底是刹车,就违反了单一职责,会容易出事故。

单一职责原则优点:

1、提高代码的可读性和可维护性:一个类只负责一个职责,代码更加清晰,更
容易理解和维护。

2、降低类的复杂度:一个类只负责一个职责,类的复杂度更低,更容易进行测试和调式。

3、降低代码的耦合度:当一个类只负责一个职责时,不同的职责可以分配到不同的类中,不同的类之间相互独立,从而降低了代码的耦合度。

4、提高代码的可复用性:一个类只负责一个职责,可以更容易的被其他模块复用。

5、便于扩展和维护:当需求变化时,如果每个类只负责一个职责,我们只需要修改相关的类即可,不需要修改其他的类,从而更容易进行扩展和维护。

2)开放封闭原则

软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。也就是说,我们应该通过添加新的代码来扩展软件的功能,而不是修改已有代码。

举例:我还是用汽车举例, 我是一个广东人,今年冬天我要开车去东北去东北吃雪,因为广东人好吃嘛,没吃过雪 想去长白山吃点新鲜的雪。东北雪很大,就需要给这个车的轮胎做防滑。 其实很简单只要给轮胎装上防滑链就可以了,这就属于是对轮胎的开放扩充。 在轮胎上面新增了防滑链,没有改变轮胎的原有功能。我们不能因为为了给轮胎做防滑,而把汽车引擎换掉了。

3)里氏替换原则

子类必须能够替换掉它们的父类。也就是说,在任何使用父类的地方,都应该能够使用子类来替代,而且程序不应该出现任何错误或异常。

里氏替换原则和多态的区别:

1)定义不同:

多态是面向对象编程的一大特性,也是面向对象编程语言的一种语法。它是一种代码实现的思路。

里氏替换是一种设计原则,用来指导继承关系中子类该如何设计。

2)作用范围不同:

里氏替换原则适用于继承关系中的父类和子类之间的关系。

多态是面向对象编程的一种基本特性,可应用于所有面向对象编程的语言中。

3)使用目的不同:

里氏替换原则的主要目的是确保使用继承时,派生类可以替换基类,并保证代码的正确性和一致性。

多态的主要目的是增加代码的灵活性和可扩展性,同时减少重复代码。

4)接口隔离原则

客户端不应该依赖它不需要的接口。也就是说,我们应该将不同的接口拆分成更小的、更具体的接口,从而避免客户端依赖于他们不需要的方法。这样可以降低接口的复杂性,提高系统的可维护性和可扩展性。

接口隔离原则的优点:

1、提高代码的灵活性和可维护性:接口隔离原则要求我们定义精简的接口,这样可以使得代码更加灵活和可维护,因为我们只需要实现我们真正需要的接口即可。

2、提高代码的可测试性:接口隔离原则可以使得代码更加容易进行测试和调试,因为我们可以只测试我们真正需要的接口。

3、降低模块之间的耦合度:当模块之间只依赖于真正需要的接口时,它们之间的耦合度更低,更容易进行组合和修改。

4、提高代码的可复用性:当接口精简清晰时,代码的可复用性也会提高,因为
我们可以更容易地将代码组合到不同的应用场景中。

5、提高代码的安全性:接口隔离原则可以避免一些意外的依赖关系,从而提高
代码的安全性。

接口隔离原则和单一职责原则的区别:

1)单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。

2)单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要是约束接口,主要针对抽象和程序整体框架的构建。

5)依赖倒置原则

高层模块不应该依赖底层模块,而是应该依赖于抽象。也就是说,我们应该面向接口编程,而不是面向实现编程。

依赖倒置原则的核心思想是:针对抽象编程,而不是针对具体实现编程。这样可以降低模块之间的耦合度,使系统更加灵活、可扩展和易于维护。同时,依赖倒置原则也可以促进面向对象设计的另一个原则——开闭原则的实现,即可以在不修改已有代码的情况下,通过添加新的实现来扩展系统的功能。

依赖倒置原则、依赖注入、控制反转三者的区别与联系

1)依赖倒置原则:是一种通用的软件设计原则,主要用来指导框架层面的设计。

2)控制反转:与依赖倒置有一些相似,它也是一种框架设计常用的模式,但并不是具体的方法。

3)依赖注入:是实现控制反转的一种手段,他是一种具体的编码技巧。

6)迪米特法则

一个对象应该对其他对象有最少的了解。也就是说,我们应该尽量减少对象之间的依赖关系,使得系统更加灵活、可扩展。

迪米特法则表达的思想:不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。

7)合成复用原则

合成复用原则是一种面向对象设计中的设计原则,其核心思想是:尽可能使用对象组合和聚合,而不是继承来实现代码复用和灵活性。

在实现代码复用时,通常会考虑使用继承。然而,继承的局限性在于,它将子类于父类紧密耦合在一起,使得继承关系在设计时非常固定且难以修改,同时也增加了代码的复杂性。

相比之下,合成复用原则更加灵活。它通过将功能分解成更小的对象,将这些对象组合在一起来构建更复杂的对象,从而实现代码复用和灵活性。

聚合是指一个对象持有其他对象的引用,这些被持有的对象可以独立存在于整个系统中。

8)KISS原则

KISS原则是Keep It Simple And Stupid 的缩写,意思是”保持简单和愚蠢“。它是一种设计原则,通常用于软件开发和系统设计中。

KISS原则的核心思想:要尽可能地保持简单,避免过度复杂化和不必要的复杂性。它要求开发者尽可能地使用简单和易于理解地解决方案来解决问题,避免过度设计和过度工程化。

如果觉得本文对您有帮助,欢迎点赞+收藏+关注!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java23种设计模式可以分为三类:创建型模式、结构型模式和行为型模式。 1. 创建型模式: 1) 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 2) 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 3) 单例模式:确保类只有一个实例,并提供全局访问点。 4) 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 5) 原型模式:通过复制现有实例来创建新实例。 2. 结构型模式: 1) 适配器模式:将一个类的接口转换成客户希望的另一个接口。 2) 装饰器模式:动态地给一个对象添加一些额外的职责。 3) 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 4) 外观模式:为子系统中的一组接口提供一个一致的界面。 5) 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 6) 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。 7) 享元模式:运用共享技术有效地支持大量细粒度的对象。 3. 行为型模式: 1) 策略模式:定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。 2) 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 3) 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 4) 迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 5) 职责链模式:将请求的发送者和接收者解耦,使得多个对象都有机会处理这个请求。 6) 命令模式:将一个请求封装成一个对象,从而使我们可以用不同的请求对客户进行参数化。 7) 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 8) 状态模式:允许一个对象在其内部状态改变时改变它的行为。 9) 访问者模式:表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 10) 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。 以上是Java23种设计模式简介和使用场景。在具体的开发中应根据实际情况选择合适的设计模式,避免滥用设计模式导致代码变得复杂难以维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值