Java学习笔记整理: 关于设计模式解析和设计原则 2024/7/10;

设计模式:

自理解:并不是java提供的方法而是一种人为手写的方式;实现其推荐实现的功能;

软件设计模式的概念:

软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用多数人知晓的代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。

学习设计模式的必要性

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。

正确使用设计模式具有以下优点。

  1. 可以提高程序员的思维能力、编程能力和设计能力。

  2. 使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。

  3. 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

设计模式分类:

  • 创建型模式

    用于描述"怎样创建对象",它的主要特点是"将对象的创建与使用分离 "。GoF(四人组)书中提供了单例原型工厂方法抽象工厂建造者等 5 种创建型模式。

  • 结构型模式

    用于描述如何将类或对象按某种布局组成更大的结构,GoF(四人组)书中提供了代理适配器桥接装饰外观享元组合等 7 种结构型模式。

  • 行为型模式

    用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。GoF(四人组)书中提供了模板方法策略命令职责链状态观察者中介者迭代器访问者备忘录解释器等 11 种行为型模式。

设计模式:

设计模式3大类23种

设计原则:

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。

开闭原则:

自理解:保证代码的可扩展性,同时已完成的代码增加或修改功能时,应扩展原有的代码而不是修改原有的代码

就是说对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。 对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

这样的设计,能够面对需求改变却可以保持相对稳定,从而使系统在第一个版本以后不断推出新的版本;面对需求,对程序的改动是通过增加新的代码进行的,而不是更改现有的代码; 所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等。

里氏代换原则

自理解:子类调用父类方法必须完全可实现其父类中的方法;

里氏代换原则是Barbara Liskov提出的,这是一种面向对象的设计原则,即如果我们调用一个父类的方法可以成功,那么替换成子类调用也应该完全可以运行

依赖倒转原则

自理解:将要实现的功能分类写成抽象类或接口,细节(指组成每个分类的类别中每个实体)应继承或实现于其;实现高度自由组合(解耦合),使每个细节不影响主类(指高层模块)的功能,而主类可以自由的切换/调度继承或实现其的分支;

高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

接口隔离原则

自理解:接口的实现不能强行实现于其的类实现该类不需要的方法,需要可以根据该类需求自己选择性实现方法;(将一个抽象类中多个不同的方法分成多个抽象类每个分配一个方法)

客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。

迪米特法则

自理解:每一个细节(指组成每个分类的类别中每个实体)之间相互隔离,实现其于其他类的关联应由其父类进行;

迪米特法则又叫最少知识原则。

只和你的直接朋友交谈,不跟"陌生人"说话(Talk only to your immediate friends and not to strangers)。

其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

迪米特法则中的"朋友"是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

合成复用原则

自理解:将重复的子类继承提取到主类中,通过声明变量达到缩减声明类的效果

尽量使用合成/聚合.避免继承.在新类中应该尽量使用关联关系采用现有的对象,使之成为新对象的一部分.达到现有功能复用的目的. 通过合成聚合的原则可以降低类于类之间的依赖关系.被依赖的类的修改对其他类的影响相对小一些. 合成/聚合原则是动态的.可以自由选择使用现有类的那些方法.而继承是静态的,失去了灵活性.如果父类改变有可能会影响子类的修改,同时破坏了父类的封装性,父类将会暴露不相关的方法给子类.

相关推荐
ever_up97323 分钟前
EasyExcel的导入与导出及在实际项目生产场景的一下应用例子
java·开发语言·数据库
ok!ko1 小时前
设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)
java·开发语言·设计模式
丢爸2 小时前
网络学习-eNSP配置NAT
linux·网络·学习
丷丩2 小时前
一个Java中有用的JacksonUtil类
java·json·工具
爱摄影的程序猿2 小时前
JAVA springboot面试题今日分享
java·spring boot·spring·面试
YHPsophie2 小时前
AT3340-6T杭州中科微BDS定位授时板卡性能指标
经验分享·笔记·学习·车载系统·信息与通信
qq_317060953 小时前
java之http client工具类
java·开发语言·http
ZJKJTL3 小时前
Spring中使用ResponseStatusExceptionResolver处理HTTP异常响应码
java·spring·http
6230_3 小时前
关于HTTP通讯流程知识点补充—常见状态码及常见请求方式
前端·javascript·网络·网络协议·学习·http·html
Pandaconda3 小时前
【C++ 面试 - 新特性】每日 3 题(六)
开发语言·c++·经验分享·笔记·后端·面试·职场和发展