- 博客(14)
- 收藏
- 关注
转载 观察者模式
观察者模式1、概念 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。2、目的 一个对象状态改变,所有的依赖对象都将得到通知。3、解决方案 定义一个Subject接口,作为主题(被观察者),它把所有对观察者对象的引用文件存在了一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供了一个接口,可以增加
2020-12-23 23:45:55
263
原创 适配器模式
适配器模式1、概念 定义一个包装类将一个类的接口转换为调用方希望的另一个接口。包装类称为适配器Adapter,被包装的类一般称为适配者Adaptee。2、目的 把由于接口不匹配而无法一起工作的两个类通过适配器给连接起来,使其能够一起工作。3、解决方案类适配器模式:通过继承Adaptee类和实现Adapter接口进行匹配,将适配者Adaptee的API转换为调用方希望的API。对象适配器模式通过委派关系进行匹配,即适配器Adapter包装了适配者Adaptee的一个实例,对外提供
2020-12-23 23:12:15
189
原创 Spring单元测试中@SpyBean和@MockBean区别
Spring单元测试中@SpyBean和@MockBean区别1、默认行为不同对于没有用Mockito代理的方法,@SpyBean会调用真实的方法,有返回值的会返回方法的真实返回值(参考下方SpyBeanTest的testException4)。@MockBean不管有没有用Mockito代理方法,都不会调用真实的方法,有返回值的会返回null(参考下方MockBeanTest的testException4)。2、Mockito代理的方式不同@MockBean的代理使用方式:Mockit
2020-12-23 10:02:45
8444
1
原创 模板方法模式
模板方法模式1、概念定义一个操作中的算法框架,而将一写步骤延迟到子类中去实现,使子类可以不改变一个算法的结构即可重定义该算法的部分步骤。2、目的封装不变的部分,扩展可变的部分。把我们不知道具体实现的步骤封装成抽象方法,提供一个按正确顺序调用它们的具体方法(这些具体方法统称为“模板方法”),这样构成一个抽象基类。子类通过继承这个抽象基类去实现各个步骤的抽象方法,而工作流程却由父类控制。3、解决方案 准备一个抽象类,定义一个操作中的算法的骨架,将一些步骤声明为抽象方法迫使子类去实现。不
2020-12-22 23:57:43
146
转载 门面模式
门面模式1、概念提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。本质:就是化零为整;引入一个中介类,把各个分散的功能组合成一个整体,只对外暴露一个统一的接口;这两年流行微服务,即化整为零,把一个大服务拆分成一个个零部件;而门面模式则是反其道,是化零为整;2、目的为了用户使用方便,把过度拆分的分散功能,组合成一个整体,对外提供一个统一的接口。3、解决方案本质:引入一个第三方中介类,这个类集合了多个零部件类的
2020-12-22 22:59:30
227
原创 策略模式
设计模式之策略模式1、概念(1)什么是策略模式?定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式保护策略接口、具体策略类及上下文角色。策略接口用来定义算法,如下方例子的StudyStatus;具体策略类用来实现策略接口,实现不同的算法,一般都会有多个策略类,如下方例子的BuddhismStudy、PlayAndStudy、OvernightStudy;上下文角色是用来屏蔽高层模块对策略的直接访问,起承上启下的作用。如下方例子中的CollegeStudents就是上下文角色,
2020-12-21 22:59:22
171
转载 工厂模式
设计模式之工厂模式1、概念(1)什么是工厂模式?工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。(2)为什么用工厂模式?可以让调用方不需要负责对象的创建,明确了各个类的职责。实现了调用方和工厂的解耦,后期维护容易。2、工厂模式的三种模式(1):简单(静态)工厂模式该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建
2020-12-21 22:03:51
143
原创 单例模式
单例模式1、概念(1)什么是单例模式? 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,并提供一个访问它的全局访问点。即一个类只有一个对象实例。 适用性:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。(2)单例模式实现原理(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类
2020-12-20 23:48:35
167
原创 装饰模式
装饰模式1、概念(1)什么是装饰模式? 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。(2)为什么用装饰模式? 需要对原有对象的功能进行扩展的时候、需要动态地给一个对象增加功能,并可以动态地撤销时、需要为一批的兄弟类进行改装或加装功能时。 一般来说扩展一个对象的功能的方式有三种:继承、装饰器模式、代理模式。 继承:也可以通过继承父类、子类扩展的方式对功能进行扩展。缺点是 1、无法获取父类的私有属性
2020-12-20 21:29:07
200
原创 代理模式
代理模式1、概念(1)什么是代理模式? 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子:要买某个东西时,我们不用自己费劲挑选,可以直接问朋友推荐买哪个东西,然后告诉我们直接买就行了。这时朋友就充当了代理的角色。(2)为什么用代理模式? **中介隔离作用:**在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。
2020-12-20 16:52:16
128
原创 Spring AOP注解实现
Spring AOP理解1、概念(Aspect Oriented Programming:面向切面编程) 什么时候会出现面向切面编程的需求?按照软件重构的思想,如果多个类中出现重复的代码,就应该考虑定义一个共同的抽象类,将这些共同的代码提取到抽象类中,比如Teacher,Student都有username,那么就可以把username及相关的get、set方法抽取到SysUser中,这种情况,我们称为纵向抽取。 但是如果,我们的情况是以下情况,又该怎么办? 给所有的类方法添加性能检测,事务控制,该
2020-12-20 00:47:17
269
1
转载 多态
继承链中对象方法的调用的优先级:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。向上转型:如naimal cat=new cat();//cat类是naimal类的子类子类引用的对象转换为父类类型称为向上转型。向上转型时,子类单独定义的方法会丢失。比如dog类中定义的run方法,当animal引用指...
2018-07-29 09:48:16
204
转载 Java创建数组的方式
法一:利用new运算符创建数组int[] arr=new int[n];//n表示字符串大小法二:直接给字符串赋值int[] arr={1,1,23,4,56};法三:new一个数组的时候直接赋值int[] arr=new int[]{1,2,3,45,6};...
2018-06-05 21:21:05
421
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人