设计模式
动机至善
编程的三大境界:
1、初能望文生义、死记硬背,可小成(实现功能);
2、进能变通运用、举一反三,有一得(优化功能);
3、终能深入浅出、知行合一,方大就(凡事自动化)。
展开
-
责任链模式
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。下面是一个具体案例,需求:去除聊天记录当中的 脚本、联系方式、敏感关键字实体类代码:import java.io.Serializable;public class Msg implements Serializable{ /** * */ pri...原创 2021-03-29 23:52:00 · 173 阅读 · 3 评论 -
观察者模式
目录1、抽象主题2、具体主题3、抽象观察者4、具体观察者5、测试类6、运行结果1、抽象主题public interface Subject { /** * @desc 注册观察者 * @date 2021年3月21日 * @param ob * @return void * @auther Bruce * @version 1.0 */ public void registObserver(ObServer ob); /**...原创 2021-03-21 00:41:59 · 86 阅读 · 2 评论 -
模板方法模式
这种模式在我们是实际工作中用的是最多的,项目中的各种 BaseController BaseService BaseDao BaseManager采用的都是模板方法模式,其本质就是将一些公共的行为抽取出来形成一个抽象类,由子类去继承,这样对于公共的部分就不需要每个子类再写一遍。优点:封装固定的公用的部分,扩展可变的部分。/** * @desc 控制层模板 * @date 2020年9月8日 * @author liujl */public abstract class Cont...原创 2020-09-08 12:29:17 · 96 阅读 · 0 评论 -
适配器模式
适配器模式的主要作用是将一个类的接口转换成用户所期待的。一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作,所以适配器模式的使用场景一般都是做各种标准化平台的时候使用,目的是将一组同类型接口经过简单的封装转换改装成一个统一标准的接口。/** * @desc 外部系统获取发票入口 * @date 2020年9月7日 * @author liujl */public interface PlatformInvoice { /** * @param taxNo ...原创 2020-09-07 13:22:43 · 140 阅读 · 0 评论 -
门面模式
我的定义:将一个相对固定的流程封装成一个门面,供外部统一调用。其实我们现实生活中也有不少这样的例子,比如做饭这个事,饭店就相当做饭这个事情的一个门面,对于吃饭的人而言,不需要了解整个做饭的过程(买菜->洗菜->切菜->炒菜...)我们只需要调用饭店这个对象即可。好处:1、简单易用,将特定流程的简单封装2、松散耦合,当这个流程需要微调的时候,我们只需要修改这个封装的对象,而不需要修改客户端。/** * @desc 定义一个炒菜的流程 * ...原创 2020-09-07 11:02:32 · 57 阅读 · 0 评论 -
多例模式
多例模式有两种,一种是指定上限的多例,另一种是不设上限(这种和随时随地new没什么区别,不做讨论),我们通常说的多例指的是第一种,这种模式比较简单,说白了就是在单例基础上多new几个出来,然后提供两个获取对象的方法,一个随机获取,一个定点获取。代码如下:/** * @desc 多例模式 * @date 2020年9月6日下午3:14:42 * @author liujl */public class MoreInstance { /** * 定义多例的上限 ...原创 2020-09-06 15:36:12 · 1269 阅读 · 1 评论 -
代理模式
概述 代理说白了就是我们说的中介,它拥有和原代理对象一模一样的功能,同时还可以增加一些额外的功能,这一点就很爽,因为这意味这我们可以对已有对象的功能做充分的扩展,所以这一模式在几乎所有的框架中都有用到,所以就更需要学习一下了。代理模式分为两种: 静态代理:代理类和被代理的类实现了同一接口或继承同一抽象类,当然也可以直接继承被代理的类 动态代理:通过反射创建目标类的对象,从而进行一系列的操作 实现InvocationHandler接口 实际工作...原创 2020-09-04 23:48:41 · 107 阅读 · 0 评论 -
策略模式
概述: 策略模式就是定义了一个对象在不同场景下的不同操作。比如:发票这个对象,会根据不同的类型对应不同的统计方式。使用场景: 但凡有3个以上的if 出现的地方,都可以考虑使用策略模式来代替,当然要依据具体的业务场景,比如应用程序对数据库的操作,就四种(select insert update delete)像这样的场景我们没有必要为了用策略而用。 我们用设计模式的初衷是增强程序的健壮性、稳定性、扩展性。下面我们通过一个简单的案例具体说明。组成: 抽象策...原创 2020-09-04 18:02:38 · 80 阅读 · 0 评论 -
单例模式
概述 单例模式:顾名思义,当前类的对象在系统中只有一个,因此节省了资源,也免去频繁创建对象的过程。使用场景:1、创建对象成本较高,且需要频繁使用的对象。比如系统中的字典工具类,频繁创建不仅有网络传输成本还有IO成本,频繁创建和销毁对于系统而言开销是比较大的。2、频繁访问数据库或者文件的对象。3、系统中的全局计数器4、多线程应用的线程池工具类5、Web应用中读取配置的工具类对象实现方式:1、常用的饿汉式的实现方式: 这是我们工作中最常用的一种实现方...原创 2020-09-03 23:03:26 · 89 阅读 · 0 评论 -
设计原则
面向对象的六大设计原则(开单介意嘴里)1、开闭原则 对扩展开放,对修改关闭 解读:在生活中我们几乎不会想着往一个已经修好的高楼加一个地下室,但是在软件开发过程中,但凡有点研发经验的小伙伴们应该都有这有的经历,那就是在已经上线的代码中加入新的需求。当然这源于客户不断的更新自己的个性化需求。这个时候如何快速的满足当前的客户的个性化需求的同时不影响已有功能的正常运行成为了攻城狮们关心的主题。 这时开闭原则隆重的登上了面向对象设计的历史舞台。 在java中我们主要依赖...原创 2020-09-03 22:05:56 · 97 阅读 · 0 评论 -
工厂模式
一、概述 1.1 说人话: 工厂,顾名思义,就是用来生产某种物品的组织。在程序设计的过程中,我们一般用它来生产对象。程序设计过程中,我们把某一类对象的生产操作交给制定的工厂,比如CarFactory 、AnimalFactory分别用来生产不同的汽车和不同的动物。 1.2 好处: 对象的统一管理,提高开发效率,便于维护比如我们之前需要一个汽车对象 Car car = new Car();用一次new一次,用100次就要new一百次,比如某...原创 2020-09-03 13:46:59 · 76 阅读 · 0 评论