如何写好一段代码?直接CRUD、if-else、for、一个大方法等实现,从完成任务的角度来说没任何问题,但是会遇到一些问题,例如:后续写个新逻辑又得重新开发,而且代码相似度很高;想添加一个额外的功能发现代码写的不够灵活-实现不了;其他人来读代码发现耦合太严重,一个大逻辑读的不太懂。这里讲的其实就是代码的复用性、可维护性、扩展性,结合日常写代码的一些经验和大家分享一下具体怎么实现?

目标:复用性、可维护性、扩展性

思想:抽象设计思想、重构思想

实现:通过一些设计模式(这里讲用到的常用设计模式)可以很好的实现代码抽象化设计,同时结合java的一些常用工具,运用上述在开发过程中不断重构实现

  • 设计模式:
  1. 装饰模式:创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。例如:对发送MQ消息添加一个trace id,不改变原有发送消息基础上进行增强实现。
  2. 工厂模式:创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。例如:调用不同支付方式支付,传入支付方式id,工厂自动创建对应处理类,然后进行处理。
  3. 责任链模式:每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。例如:对一个业务进行N个逻辑验证,有一个不匹配就返回参数验证异常,如何匹配就往下传递。
  4. 模板模式:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。例如:不同支付方式退款,核心流程一致,但是逻辑上有差异,抽象类定义通用处理流程(核心流程)不具体实现,子类进行个性化实现。
  5. 代理模式:创建具有现有对象的对象,以便向外界提供功能接口,通过代理控制(限制)对这个对象的访问。例如:mybatis的具体执行方法。
  6. 策略模式:创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。例如:不同支付方式的实际支付行为,通过策略来控制。
  7. 外观模式(门面模式):隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。例如:后台各子系统需要统一的访问入口,但是各自又不太想直接和前端对接。
  8. 单例模式:涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。例如:spring的bean管理,公共线程池的创建,分布式id生成器等
  9. 观察者模式:当一个对象被修改时,则会自动通知依赖它的对象。例如:支付成功后发送消息,通知订单修改状态、生成财务记录、生成对账数据等
  10. 建造者模式:使用多个简单的对象一步一步构建成一个复杂的对象。例如:mybatis查询对象的构建(最终生成动态sql)
  11. 状态模式:创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。例如:不同支付状态业务流转处理,不同退款装业务流转处理等
  • java相关:
  1. 接口:定义协议不用关心具体怎么实现
  2. 抽象类:父类包含了子类集合的常见的方法,差异化方法子类自己实现
  3. 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
  4. 动态代理:利用反射机制在运行时创建代理类(区别静态代理)
  5. AOP:面向切面编程,切面编程的目的是为了把通用逻辑从业务逻辑分离出来
  6. SPI:举个简单的例子,我们想在运行时动态给它添加实现,你只需要添加一个实现,然后把新的实现描述给JDK知道就行了。大家耳熟能详的如JDBC,日志框架都有用到
  7. 函数式接口:
    Functio接口 接受一个输入参数,返回一个结果
    Consumer接口 消费者,接受一个输入参数,并且不返回任何结果
    Supplier接口 生产者,无参数,返回一个结果
    Predicate接口 断言,该接口对应的方法为接收一个参数,返回一个Boolean类型值,多用于判断与过滤
  8. 其他:过滤器、拦截器、注解+反射、注解+拦截器、map+函数接口、Lambda 表达式、方法引用 、Stream API、Optional 类、默认方法等

设计一个扩展自抽象类geometricobject的新的triangle类_如何进行代码抽象设计?相关推荐

  1. 设计一个扩展自抽象类geometricobject的新的triangle类_面向对象设计原则之开放封闭原则(开闭原则OCP)...

    (1) 定义 一个软件实体(类.模块.函数等),对于扩展是开放的,对于更改是封闭的. 对于扩展是开放的:这意味着模块的行为是可以扩展的.当应用的需求发生改变时,我们可以对模块进行扩展,比如增加新的类或 ...

  2. 设计一个扩展自抽象类geometricobject的新的triangle类_C++ 接口(抽象类)

    C++ 接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现. C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念. 如果类中至 ...

  3. 设计一个扩展自抽象类geometricobject_设计模式4之模板方法模式

    背景 在开发中,你肯定有遇到过这样一种场景:你知道某个方法的关键步骤以及执行顺序,但是里面有的具体步骤并清楚.你会怎么做? 比如你早上起床到公司,我们分解步骤: "起床洗漱吃早餐乘坐交通工具 ...

  4. 设计一个Shape接口和它的两个实现类Square和Circle

    设计一个Shape接口和它的两个实现类Square和Circle. (1)Shape接口中有一个抽象方法area(),方法接收有一个double类型的参数,返回一个double类型的结果. inter ...

  5. 设计一个成绩分类 输入成绩 输出优秀_BenQ 明基 PD2720U 27寸 Thunderbolt3.0 专业设计显示器开箱评测...

    前言我们刚评测过BenQ的PD2705Q 27寸2K Type-C专业设计显示器.今天要为大家带来同为PD系列的BenQ PD2720U专业设计显示器,27英寸搭载4K UHD分辨率屏幕,支持96% ...

  6. python定义一个triangle类_设计一个程序,程序中有三个类,Triangle,Lader,Circle。...

    //此程序写出三个类,triangle,lader,circle:其中triangle类具有类型为double的a,b,c边以及周长,面积属性, //具有周长,面积以及修改三边的功能,还有判断能否构成 ...

  7. 如何做代码抽象设计,多种设计模式的应用【四种抽象方式,干货附上代码】

    代码这种东西,机器不管你写的怎么样,肯定能识别, 人就不一样了,前人拉屎后人踩屎,一坨认栽,n坨就有点过分了哈 一般写代码也不用太高大上,很多接口还是很简单的,如果把各种设计模式搞上来那叫过度设计,叫 ...

  8. 计算机ppt教案设计大赛,全国xx杯说课大赛计算机专业类一等奖作品:三维动画设计教学课件.ppt...

    全国xx杯说课大赛计算机专业类一等奖作品:三维动画设计教学课件.ppt 文档编号:906919 文档页数:14 上传时间: 2020-02-16 文档级别:普通资源 文档类型:ppt 文档大小:1.8 ...

  9. 设计一个处理两种类型地址的地址簿程序_编译器设计-符号表-中间代码生成

    编译器设计-符号表-中间代码生成 Compiler Design - Symbol Table Compiler - Intermediate Code Generation 一.Compiler D ...

最新文章

  1. Spring Boot 2.6.1 发布:为 Spring Cloud 2021铺路!
  2. 《BI那点儿事》三国人物智力分布状态分析
  3. Android listView 去掉header和footer中的分割线
  4. Boost:使用/type <>语法测试功能对象
  5. php必须汉字,php怎么只保留汉字
  6. SAP-R3被取代,苏宁采购平台的升级和架构演进之路
  7. linux amd64 界面,linux脚本编程---ubuntu-12.04-server-amd64如何配置图形界面
  8. 简单理解梯度消失与梯度爆炸
  9. Spring security3入门(转)
  10. iOS数据持久化(二)SQLite
  11. 宾馆客房管理系统——前后端分离
  12. Rust语言教程(6) - 错误处理和可选值
  13. 马克思主义基本原理概论第一章笔记
  14. mysql百万数据迁移_Mysql百万级数据迁移实战笔记
  15. 即构上线“语音社交+互动直播”鉴黄整套方案
  16. Amazon软件开发工程师面试题
  17. 前端打包之后 运用nginx反向代理运行项目
  18. 【计算机组成原理】学了计组,CPU执行时间你肯定会算了吧
  19. 程序员如何摆脱天天CRUD这种打杂状态?
  20. windows server 2016打开服务器管理器和启用或关闭windows功能报.net fr

热门文章

  1. Linux创建逻辑卷
  2. Jsp页面用javascript加 滑动验证条
  3. easyswoole事务mysql_easyswoole ORM 事务操作管理
  4. 做折线图_python的visvis库做折线图(line.py)代码详解
  5. c语言中打印ipv6地址,c-来自任何有效地址的ipv4和ipv6
  6. springboot 以jar方式在linux后台运行
  7. mysql 数据库锁一般处理
  8. 织梦DeDeCMS友情链接文字显示不全
  9. 20145309李昊《网络对抗》MSF应用基础
  10. css改变滚动条样式