当前位置: 首页 > news >正文

设计模式学习(1)

面向对象设计原则

单一职责

每个类只有一个职责,并被完整的封装在类中,该原则用来控制类的粒度。

例如Mapper,controller都只负责一个业务。

开闭原则

应该对扩展开放,而对修改封闭,例如定义接口或是抽象类作为抽象层,其具体层子类可以多种多样。

里氏替换原则

子类只能扩展父类的功能,不能修改父类的功能。

依赖倒转原则

高层不应该依赖于底层,而是应该依赖于抽象,防止代码之间出现强关联强耦合,因此在Spring框架中使用的是接口定义职责,这样高层只需关注接口定义的方法,不用关心实现类,有框架自动管理。

接口隔离原则

接口的划分应该注意粒度,不要让一些类实现不必要的接口方法,如果出现一个实体类实现接口后,方法无意义,就应该进一步划分接口

合成复用原则

如果需要复用某个类的功能,优先考虑将其引入本类内部作为类的内部成员或是作为参数传入,而不是去继承,进一步降低耦合度,也防止A的实现细节暴露导致不安全。

迪米特原则(最小知识原则)

每个类或模块应该对其他类有着最小的知识或是最小的交互,降低耦合度。

创建型设计模式

工厂方法模式

如果直接使用new方式进行创建对象,不仅麻烦一旦出现改动,可能导致需要修改大量代码,如果使用工厂模式,由工厂进行创建则只需要修改工程中的代码即可,同时有些对象的创建可能需要参数,不是简单new即可。

简单工厂模式(不符合开闭原则),如果增加类,则需要修改工厂方法。

因此改进为工厂方法模型,将生产实体类作为一种职责,变化到抽象层,具体的实体类对应具体层实现。

抽象工厂模式

如果有多个个产品族,每个都创建一个工厂就不方便,因此直接创建一个抽象的顶层工厂,具体的产品族进行不同的实现,但是缺点在于违背了开闭原则,如果产品族中新增产品就需要修改抽象层。

建造者模式

建立一个Builder类,对需要创建的对象进行配置,最后在创建,注重的是一步一步配置的过程,且构造方法参数过多时应该使用,此时应该将类的全参构造方法设为私有,用建造者类进行配置

builder自身也应该保存参数,支持链式调用,build()处进行调用全参构造方法传入设定好的所有参数。

单例模式

就是只用一个实例的情况下,无需创建太多实体对象,使用一个或者静态方法就能满足需求。

饿汉

懒汉式(懒加载)

线程不安全,可能导致创建多个对象。

加锁版本,加锁后应该还要判断,否则可能有多个线程都已经判空并在等锁,导致创建多次

还需要再INSTANCE上加上volatile,以保证该对象在线程中的可见性

最优解是使用另一个静态内部类持有实例对象,既延迟加载又线程安全。

原型模式

使用原型对象进行拷贝生成新的对象(深拷贝),不能直接使用Java的拷贝方法,而是应该重写实现深拷贝,

相关文章:

  • 顺据结构(C\C++)——双向链表
  • 【Qt】游戏场景和图元
  • rbpf虚拟机-JIT和解释执行对比
  • 数据处理的两种范式:深入解析OLTP与OLAP系统
  • 自动驾驶实验
  • 13届省赛python A组:10.数的拆分
  • 【Linux】进程间通信(IPC)-- 无名管道、命名管道
  • 请求Header(Request Headers)详解
  • LeetCode算法题(Go语言实现)_22
  • 操作系统的运行机制
  • 运放的噪声计算
  • 同步SVPWM调制策略的初步学习记录
  • 六十天Linux从0到项目搭建(第二十四天)(共享内存)
  • 鸿蒙开发03样式相关介绍(二)
  • 《MOSFET:静电场中的无声刺客》
  • DirectX安装步骤(包含安装包)DirectX详细图文安装教程
  • LangChain 安装与环境搭建,并调用OpenAI与Ollama本地大模型
  • 31天Python入门——第17天:初识面向对象
  • Android设计模式之责任链模式
  • 小程序:富文本的处理
  • 昭平县建设局网站/网络优化的流程
  • 网站登记模板/深圳推广不动产可视化查询
  • 盘古网络营销中心/北京网站优化经理
  • 工程建设标准化期刊网站/临沂seo公司
  • 建筑设计公司资质/优化关键词排名
  • 影视类网站建设/百度云网盘资源搜索引擎入口