首页 > 其他分享 >开发思想

开发思想

时间:2022-08-21 18:14:40浏览次数:62  
标签:思想 原则 接口 接口隔离 开发 线程 上下文

思想

策略思想

解决的问题:一类对象,不同对象有不同的处理

实现

顶级接口

  • 定义规范,面向接口编程

抽象策略

  • 定义一套模板,不同的交给不同的策略实现

具体策略

  • 枚举 对象标识 --具体策略

  • 策略集合-对象标识

 

观察者思想

解决的问题:当一个对象状态发生改变时,所有依赖他的对象将得到通知并自动更新

常见场景:

  • spring事件

  • 消息队列

  • 我们不用去关心依赖的对象,只用把自己的事情做好

实现:

  • 充分解耦

  • 可实现一对一和广播

顶级事件接口

具体事件

顶级订阅者接口

具体订阅者

事件发布中心

 

上下文思想

解决的问题:当一个参数在需要四处传递,可设置上下文,从上下文中取

实现:

  • spring提供了一系列获取容器对象的接口ApplicationContextAware....

上下文顶级接口,定义规范

具体上下文

  • 保证全局唯一

  • 并非容器

池化思想

线程池

  • 复用线程,减少系统资源的消耗

  • 便于管理线程

  • 快速的响应

合理的线程池:根据不同场景,情况去构建合适的线程池,保证效率和资源消耗

场景:流程发布,构建流程轨迹

实现

CAS锁控制控制线程池唯一,只有一个线程能够进行调度(提交任务)

private AtomicBoolean started = new AtomicBoolean(false);

private AtomicBoolean scheduler = new AtomicBoolean(false);

自定义阻塞队列,存放任务

private BlockingQueue<ProcessDefinition> queue = new LinkedBlockingQueue<>(512);

单个线程循环处理,allowCoreThreadTimeOut回收线程节约资源

this.executor.allowCoreThreadTimeOut(true);


try {
           ProcessDefinition definition;
           while ((definition = queue.poll()) != null) {
               handler(definition);
          }
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           scheduler.compareAndSet(true, false);
           if (!queue.isEmpty()) {
               scheduler();
          }
      }

设计思想

并不是绝对的,灵活变通

  • 构建合理的类结构,便于扩展,理解

  • 提取公共方法实现复用

单一职责模式

一个类只做一个事情,可通过依赖建立联系

优点:职责分明,结构清晰,便于修改

前:

img

后:

img

开闭原则

实现不改变这个类的情况下进行扩展

实现:策略模式

前:

img

 

后:

img

里氏替换原则

通过继承来进行扩展

依赖倒置原则

面向接口编程

 

合成复用原则

多用组合代替继承

  • 一般来说,如果两个类之间是"Has-A"关系,则使用组合/聚合;如果是"Is-A"关系,则使用继承。

迪米特法则

中间类

接口隔离原则

接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:

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

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

接口拆分

标签:思想,原则,接口,接口隔离,开发,线程,上下文
From: https://www.cnblogs.com/lcjtt/p/16610462.html

相关文章

  • spring5 事务 纯注解开发
    1.TxConfigpackagecom.config;importcom.alibaba.druid.pool.DruidDataSource;importorg.springframework.context.annotation.Bean;importorg.springframework.......
  • STC8H开发(十六): GPIO驱动XL2400无线模块
    目录STC8H开发(一):在Keil5中配置和使用FwLib_STC8封装库(图文详解)STC8H开发(二):在LinuxVSCode中配置和使用FwLib_STC8封装库(图文详解)STC8H开发(三):基于FwLib......
  • 64位内开发第二十三讲,分层过滤驱动-键盘过滤
    目录64位内开发第二十三讲,分层过滤驱动-键盘过滤一丶键盘过滤的两种方式1.1第一种方式驱动对象方式绑定1.2第二种方式,直接设备类型绑定.1.3效果64位内开发第二十三......
  • Java后端开发需要学什么?
    Java基础Java是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的oop特性:封装、继承、多态。此外还有泛型、反射的特性,很多框架的技术都依赖它,比如S......
  • MAMP Pro (PHP/MySQL开发环境)
    mamppro是最优秀的本地服务器搭配软件,也是最好的mysql开发环境和php开发环境,包含了acintosh、Apache、MySQL和PHP四大开发环境,用户只要轻松点选就能对架站、讨论区、论坛......
  • flask开发环境配置
    1.安装虚拟环境,打开vscode输入pipinstallvirtualenvvirtualenv--version2.创建项目文件夹mkdirmyproject创建你自己的文件夹输入cdmyproject进入你的文件夹然后输......
  • 前端开发环境搭建
    1nvm(nodeversionmanager)的安装和使用(管理node版本)下载地址:https://github.com/coreybutler/nvm-windows/releases 选择想要的版本,点击nvm-setup.zip可直接下载安装:安......
  • 一个 SAP 开发工程师在 SAP 德国总部出差的见闻系列 1:出差 ≠ 公费旅游
    SAP德国总部是SAP软件的诞生和发源地,也是不少国内SAP从业者心中的圣地,对这个圣地充满了神秘感。Jerry作为一个开发工程师在SAP成都研究院工作了15年(见我的文章......
  • 使用idea remote 开发体验
    本地使用idea开发最不好的一个体验就是打开稍大的工程就非常的卡,怎么调参数都没用,现在idea推出了idearemote就赶紧来体验下。使用方式除了idea不需要额外下载什么包,但是......
  • 阿里巴巴Java开发手册 (黄山版)
    阿里巴巴Java开发手册(黄山版)1.变量命名1.1POJO类中的任何布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误。说明:本文MySQL规约中的建表约定第......