设计模式及原则
文章平均质量分 92
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的
GeorgiaStar
世上无难事,只要肯放弃
展开
-
从Servlet、Servlet容器及Web容器的演进历程总结框架设计的套路
为什么要有Servlet ?为什么要有Servlet容器?什么是Web容器、HTTP服务器?今儿咱们就来盘盘,并且从中来总结架构和框架的设计套路。转载 2023-04-07 15:24:22 · 389 阅读 · 1 评论 -
领域建模应对软件复杂性初体验
在互联网各个在小厂维护过业务系统的开发们,应该都抱怨过编写得很烂的代码,大部分业务系统的代码都是过程式的面条,前人挖坑后人填坑,几乎是每迭代一次就能埋下一个坑,需求只要实现了就行,完全不追求设计美感。我们每天都在使用的各大APP或网站,我丝毫不怀疑,它们后台系统,一定充斥着可读性差毫无设计美感与OO思想的代码,这些过程式的面条代码,耗费了程序员的主要精力。博主常常和同事开玩笑,如果公司各个系统的代码开源,股价至少跌一半。原创 2022-02-09 16:33:10 · 763 阅读 · 0 评论 -
关于提升业务系统扩展性的一些思考
软件架构设计是一个工程问题,设计的目的是为了能以最低的成本来满足构建和运维系统的需求。其实几乎所有的软件系统在设计之初都被要求是可以扩展的。对于一套持续运行的系统来说,运维的成本往往是开发成本的10倍以上。设计一套可扩展的软件系统去支撑多变的业务,已经成为了软件设计的一个主导原则。原创 2022-10-08 16:30:51 · 1758 阅读 · 0 评论 -
如何减少软件设计和实现之间鸿沟
在软件领域,有一个古老的神话:**即我能保证设计和代码实现完全一致**。这的确是一个非常有价值的目标。试想下,如果我们的系统毫无设计,或者设计和代码实现毫无关联,在当今软件如此复杂的情况下,其实现和维护难度可想而知。.........转载 2022-07-26 11:23:00 · 804 阅读 · 0 评论 -
基于接口而非实现编程,你真的理解了吗
“基于接口而非实现编程”这条原则的英文描述是:“Program to an interface, not an implementation”。我们理解这条原则的时候,千万不要一开始就与具体的编程语言挂钩,局限在编程语言的“接口”语法中(比如Java中的 interface)。这条原则是一条比较抽象、泛化的设计思想。实际上,理解这条原则的关键,就是理解其中的“接口”两个字,这里的“接口”是泛指,可以理解为“抽象”。原创 2022-02-23 15:32:52 · 2536 阅读 · 1 评论 -
适配器模式及其在Java日志体系中的应用
适配器模式的原理适配器模式的英文翻译是 Adapter Design Pattern。顾名思义,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。对于这个模式,有一个经常被拿来解释它的例子,就是USB转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。原理很简单,适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。两种模式的类图如下:具体实现的示例代码如下。//原创 2021-03-23 19:36:40 · 650 阅读 · 1 评论 -
依赖注入(Dependency Injection)框架是如何实现的
DI容器的核心功能一般有三个:配置解析、对象创建和对象生命周期管理转载 2020-11-09 13:49:58 · 2431 阅读 · 0 评论 -
彻底理解工厂模式
一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在GoF的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。实际上,前面一种分类方法更加常见。在这三种细分的工厂模式中,简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点,在实际的项目中相对也不常用。简单工厂(Simple Factory)简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共原创 2020-10-22 15:03:39 · 907 阅读 · 2 评论 -
为什么组合优先于继承
面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。同样地,在《阿里巴巴Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。为什么不推荐使用继承每个人在刚刚学习面向对象编程时都会觉得:继承可以实现类的复用。所以,很多开发人员在需要复用一些代码的时候会很自然的使用类的继承的方式,因为书上就是这么写的。继承是面向对象的四大特性之一,用来表示类之间的is-a关系,可以解决代码复用的问题。虽然继承有诸多作用,但继承层次过深、过复杂,也会影响到代码的原创 2020-09-17 18:48:42 · 11655 阅读 · 8 评论 -
浅显易懂的策略模式
策略模式就是:定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端(这里的客户端代指使用算法的代码)。我们知道,工厂模式是解耦对象的创建和使用,观察者模式是解耦观察者和被观察者。策略模式跟两者类似,也能起到解耦的作用,不过,它解耦的是策略的定义、创建、使用这三部分。接下来,我就详细讲讲一个完整的策略模式应该包含的这三个部分。转载 2020-08-13 14:16:38 · 446 阅读 · 0 评论 -
一步一步剖析Mybatis Plugin拦截器原理
责任链模式的定义:多个处理器依次处理同一个业务请求。一个业务请求先经过A拦截器处理,然后再传递给B拦截器,B拦截器处理完后再传递给C拦截器,以此类推,形成一个链条。链条上的每个拦截器各自承担各自的处理职责,所以叫作责任链模式。利用JDK动态代理可以组织多个拦截器,通过这些拦截器我们可以在业务方法执行前后做很多想做的事。具体分析可以从一个普通的需求开始:现在要对多个接口的业务方法做一个日志记录和方法执行耗时的统计。静态代理模式肯定不行,如果这样的接口很多,代理类就会爆炸,要用动态代理。JDK动态代理p原创 2020-07-09 19:58:36 · 1164 阅读 · 0 评论 -
Spring中用到的几种典型的设计模式
Spring 框架中用到的设计模式非常多,不下十几种。本文只挑选几种典型的来解析。适配器模式在应用在Spring MVC中Spring MVC定义一个Controller最常用的方式是,通过@Controller注解来标记某个类是Controller类,通过@RequesMapping注解来标记函数对应的URL。不过,定义一个Controller远不止这一种方法。我们还可以通过让类实现Controller接口或者Servlet接口,来定义一个 Controller。这三种定义方式示例代码,如下所示:/原创 2020-06-10 14:39:13 · 1504 阅读 · 0 评论 -
傻傻分不清楚:模板方法模式与回调函数
优点封装不变部分,扩展可变部分,把认为是不变部分的算法封装到父类实现,而可变部分的则可以通过继承来继续扩展提取公共部分代码,便于维护符合开闭原则,行为由父类控制,而基本方法是由子类实现的,因此子类可以通过扩展的方式增加相应的功能缺点由子类实现,子类执行的结果影响了父类的结果,也就是子类对父类产生了影响可能引起子类泛滥和为了继承而继承的问题public abstract class AbstractClass { public final void templateMethod()原创 2020-06-05 16:43:17 · 1081 阅读 · 2 评论 -
Spring的一些知识点总结
什么是spring?Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。是一个分层的Java SE/Java EE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些原创 2020-05-14 21:51:51 · 415 阅读 · 0 评论 -
一步一步实现优雅重试
重试的作用对于重试是有场景限制的,不是什么场景都适合重试,比如参数校验不合法、写操作等(要考虑写是否幂等)都不适合重试。远程调用超时、网络突然中断可以重试。在微服务治理框架中,通常都有自己的重试与超时配置,比如dubbo可以设置retries=1、timeout=500调用失败只重试1次,超过500ms调用仍未返回则调用失败。对于开发过网络应用程序的程序员来说,重试并不陌生,由于网络的拥堵和波...原创 2020-04-29 21:18:48 · 1231 阅读 · 0 评论 -
观察者模式及EventBus框架简单实现
观察者模式:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。一般情况下,被依赖的对象叫作被观察者(Observable),依赖的对象叫作观察者(Observer)原创 2020-05-08 10:11:30 · 1648 阅读 · 0 评论 -
面向对象及软件设计原则总结
面向对象现在,主流的编程范式或者编程风格有三种,它们分别是面向过程、面向对象和函数式编程。面向对象这种编程风格又是这其中最主流的。现在比较流行的编程语言大部分都是面向对象编程语言。大部分项目也都是基于面向对象编程风格开发的。面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式编码实现的基础。面向对象四大特性理解面向对象编程及面向对象编程语言的关键就是理解其四大特性:封装、抽象、继承、多态。不过,对于这四大特性,光知道它们的定义是不够的,我们还转载 2020-05-15 16:30:10 · 1664 阅读 · 0 评论 -
彻头彻尾理解单例模式及其在多线程环境中的应用
摘要: 本文首先概述了单例模式产生动机,揭示了单例模式的本质和应用场景。紧接着,我们给出了单例模式在单线程环境下的两种经典实现:饿汉式 和懒汉式,但是饿汉式是线程安全的,而懒汉式是非线程安全的。在多线程环境下,我们特别介绍了五种方式来在多线程环境下创建线程安全的单例,即分别使用synchronized方法、synchronized块、静态内部类、双重检查模式 和Thr转载 2017-04-30 11:43:02 · 13204 阅读 · 4 评论