java设计模式的原理是基于软件工程的实践经验,总结出的一套解决特定问题的优秀解决方案。设计模式不是直接的代码实现,而是一套指导思想和方法论,用于在软件开发过程中解决常见问题,并提高代码的可维护性、可扩展性和可重用性。
花了3天的时间把23种设计模式都制作成了短视频,大家如果想系统学习,值得每一讲都去看看。这一篇主要再总结一下设计模式的用处?设计模式如何去学习及用起来?
设计模式的用处:
不用多说设计模式的用处,《设计模式:可复用面向对象软件的基础》在1994年出版的,GOF书籍总结了23种设计模式;这些模式不仅适用于Java,还适用于其他面向对象的编程语言。由于Java是一种面向对象的编程语言,设计模式作为一种面向对象设计的最佳实践,自然在Java社区中得到了广泛的应用和研究。随着Java语言在工业界的普及,开发者们开始寻求解决复杂软件设计问题的最佳实践,最佳实践逐渐被整理、归纳并形成了一套设计模式。Java设计模式的概念和分类是在Java语言诞生并得到广泛应用之后被系统化和总结出来的。是软件工程实践中对常见问题解决方案的经验和智慧的结晶。如果你想真正把Java学好,站在巨人的肩膀定会事半功倍,设计模式思想遍布于Java各种框架中,想Java学的好,设计模式不能忘了。想Java代码写的好,设计模式逃不了。
23种设计模式分为创建型、结构型和行为型三大类。
创建型设计模式1、单例模式
原理:确保一个类只有一个实例,并提供一个全局访问点。
应用场景:适用于需要全局唯一资源管理的场景,如配置管理器、数据库连接池。
框架应用:在java.util.Timer、java.awt.Desktop、数据库连接池等中使用单例模式管理实例。
2、工厂方法模式
原理:定义创建对象的接口,让子类决定实例化哪一个类。
应用场景:用于处理大量具有共同特征的对象创建。
框架应用:Java IO中的InputStream和OutputStream使用工厂方法模式创建具体的流对象。
3、抽象工厂模式
原理:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
应用场景:适用于需要创建一系列相关或相互依赖的对象时。
框架应用:Swing中的LookAndFeel外观工厂用于创建GUI组件。
4、建造者模式
原理:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
应用场景:用于创建复杂对象,如SQL语句构建器。
框架应用:Apache Commons Lang中的Builder类使用建造者模式。
5、原型模式
原理:通过复制现有的实例来创建新的实例。
应用场景:适用于创建成本高或复杂的对象。
框架应用:java.lang.Object的clone()方法使用原型模式。
结构型设计模式6、代理模式
原理:为对象提供一个代理以控制对这个对象的访问。
应用场景:适用于远程访问、延迟加载等。
Java框架应用:Java RMI和Spring AOP使用代理模式
7、桥接模式
原理:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
应用场景:适用于变化多样且要求相互间不影响的场景。
Java框架应用:不常见,一般用于自定义场景。
8、装饰器模式
原理:动态地给一个对象添加一些额外的职责。
应用场景:用于动态扩展对象功能。
框架应用:Java IO中的BufferedReader和BufferedWriter使用装饰器模式。
9、适配器模式
原理:将一个类的接口转换成客户期望的另一个接口。
应用场景:用于接口不兼容的类之间转换。
框架应用:Java IO中的InputStreamReader和OutputStreamWriter使用适配器模式。
10、外观模式
原理:为子系统中的一组接口提供了一个统一的高层接口。
应用场景:适用于简化复杂系统的接口。
Java框架应用:Spring中的JdbcTemplate使用外观模式简化数据库操作。
11、组合模式
原理:将对象组合成树状结构来表示部分-整体的层次结构
应用场景:对象的部分-整体层次结构、无差别地处理单个对象和组合对象
Java框架应用:Java AWT/Swing
12、享元模式
原理:运用共享技术有效地支持大量细粒度对象的复用。
应用场景:适用于大量相似对象的共享。
Java框架应用:Java中的String对象池使用享元模式。
行为型设计模式13、观察者模式
原理:定义对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
应用场景:用于实现事件监听机制。
Java框架应用:Java中的EventListener接口和Spring框架的事件监听机制使用观察者模式。
14、模板方法模式
原理:定义一个操作中的算法的骨架,将一些步骤延迟到子类中。
应用场景:适用于定义算法的骨架。
框架应用:Spring中的JdbcTemplate使用模板方法模式。
15、策略模式
原理:定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。
应用场景:适用于在运行时根据条件选择不同行为。
框架应用:Spring框架中的Strategy接口使用策略模式。
16、责任链模式
原理:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
应用场景:适用于需要按照某种顺序依次处理请求。
框架应用:Spring MVC中的拦截器使用责任链模式。
17、状态模式
原理:允许一个对象在其内部状态改变时改变它的行为。
应用场景:适用于对象状态变化时改变行为的场景。
框架应用:Java中的ReadWriteLock使用状态模式。
18、迭代器模式
原理:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
应用场景:用于遍历聚合对象。
框架应用:Java集合框架中的Iterator接口使用迭代器模式。
19、访问者模式
原理:表示一个作用于某对象结构中的各元素的操作。
应用场景:适用于对象结构中元素类很多且经常变化的场景。
框架应用:不常见,一般用于自定义场景。
20、备忘录模式
原理:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
应用场景:用于保存和恢复对象状态。
Java框架应用:不常见,一般用于自定义场景。
21、命令模式
原理:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化。
应用场景:适用于需要命令队列或日志记录的场景。
框架应用:Java中的Runnable接口使用命令模式。
22、解释器模式
原理:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
应用场景:适用于解释型语言的实现。
框架应用:不常见,一般用于自定义场景。
23、中介者模式
原理:用一个中介对象来封装一系列的对象交互。
应用场景:适用于多对多的交互关系。
Java框架应用:不常见,一般用于自定义场景。
设计模式如何去学习及用起来:
1、面向编程的基础知识及学习原则:编程基础知识就不提了,学习设计模式哪你得会Java,同时要熟悉SOLID原则,是设计模式的基础。
2、动手实践:每个模式自己敲一遍加深理解,当然一遍不能完全做到游刃有余的运用,要不断加深理解跟记忆,忘记了随时拿出来再看看。
3、观察实例:在开源项目中寻找设计模式的应用,这些开源项目是不是经常用的?
RxJava:RxJava是一个在Java虚拟机上实现的响应式扩展,它使用了观察者模式来处理异步数据流和事件的传播。
Spring Framework:Spring框架是Java社区中广泛使用的开源企业级应用开发框架,它在多个方面应用了设计模式,例如工厂模式用于创建对象,代理模式用于AOP(面向切面编程),单例模式用于Spring容器中的Bean实例化等。
Guava:Guava是Google开发的一套核心Java库,提供了许多基础功能,其中包含了设计模式的应用,如享元模式在缓存实现中的应用。
Lombok:Lombok是一个Java注解库,它通过减少样板代码来简化Java对象的编写。它使用了建造者模式来提供更简洁的对象构建方式。
MyBatis:MyBatis是一个持久层框架,它通过工厂模式和单例模式来管理和创建SQL映射器,同时使用代理模式来处理动态代理。
4、持续应用:在实际项目中尝试使用设计模式,不断总结经验,同时可以不断的看我录制的短视频
单例模式:确保一个类只有一个实例,并提供一个全局访问点。
工厂方法模式:定义一个创建对象的接口,让子类决定实例化哪一个类。
抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
建造者模式:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
原型模式:通过复制现有的实例来创建新的实例。
适配器模式:将一个类的接口转换成客户期望的另一个接口。
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
装饰器模式:动态地给一个对象添加一些额外的职责。
外观模式:为子系统中的一组接口提供了一个统一的高层接口。
享元模式:运用共享技术有效地支持大量细粒度对象的复用。
代理模式:为对象提供一个代理以控制对这个对象的访问。
策略模式:定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。
模板方法模式:定义一个操作中的算法的骨架,将一些步骤延迟到子类中。
观察者模式:定义对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
命令模式:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化。
备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
状态模式:允许一个对象在其内部状态改变时改变它的行为。
访问者模式:表示一个作用于某对象结构中的各元素的操作。
中介者模式:用一个中介对象来封装一系列的对象交互。
解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved