![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
Dont_worry_be_happy
这个作者很懒,什么都没留下…
展开
-
单例模式
单例模式大家并不陌生,也都知道它分为什么懒汉式、饿汉式之类的。但是你对单例模式的理解足够透彻吗?今天我带大家一起来看看我眼中的单例,可能会跟你的认识有所不同。下面是一个简单的小实例:[java] view plain copy//简单懒汉式 public class Singleton { //单例转载 2017-05-23 16:15:45 · 194 阅读 · 0 评论 -
代理模式
代理模式解决的问题:控制被代理对象的访问,简单来说就是在原有类的方法上增加一些行为。代理模式又分为静态代理和动态代理,静态代理是在编译期就确定如何修改方法行为,动态代理要在运行时决定。静态代理例如有类A:class A { void fun2() { do logic2; }}现在需求增加新的功能,要求A场景下调用fun2时向数原创 2017-05-25 17:37:55 · 181 阅读 · 0 评论 -
动态代理
动态代理当项目规模扩大时静态代理的方式不便于扩展。在上面的例子中,如果A增加新方法fun3,那么则需要联动修改代理类;如果其他类型B也需要同样的代理,那么就需要有一个ProxyB来完成和ProxyA类似的功能,会非常繁琐。有时候无法提前获知要代理的类有哪些,例如第三方框架Spring,要为你编写的类做代理,但是事先不知道有哪些类;只能在运行时确认。因此诞生了动态代理,来解决这些问题原创 2017-05-25 20:18:55 · 253 阅读 · 0 评论 -
适配器模式
适配器使用场景当系统依赖的接口提供了需要的功能,但是接口签名并不是完全匹配时,就可以使用适配器模式,将外部接口桥接到内部系统上。代码实例依赖接口public interface RemoteCallBackA { void doCallBackA();}public interface RemoteCallBackB { void doCallB原创 2017-06-17 16:20:34 · 276 阅读 · 0 评论 -
桥接模式
解决的问题当一个类存在多个维度的变化时,使用桥接模式可以增加类的灵活性。该模式体现了优先使用组合/聚合,而不是继承。实例考虑记录日志的类,从日志输出终端维度考虑,可以有控制台、文件、网络socket;而从日志输出的格式维度考虑,可以按xml格式输出,也可以按json格式输出,或者简单的字符串格式输出。如果所有的日志都来自于继承自Log接口,那么上述场景的类图可能为:可以看到原创 2017-07-02 23:22:26 · 311 阅读 · 0 评论 -
观察者模式
解决的问题:当一个类的状态变化需要通知多个类,且被通知的类型要动态变化时,就可以使用观察者模式。标准定义:观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。类结构图如下:类图中Obse原创 2017-06-25 16:21:53 · 794 阅读 · 0 评论 -
装饰者模式
解决的问题在不改变原有对象结构情况下,为类动态增加功能,避免了通过继承方式进行功能扩充导致的类体系臃肿 ,且可以采用任意顺序组织这些功能。装饰者模式类图Component是要被装饰的接口,ConcreteComponent是具体被装饰的类;Decorator是装饰器共同接口,各个具体的装饰器实现相同的装饰器接口;在装饰器中持有被装饰的Component,因为装饰器也继承自Com原创 2017-06-25 17:08:02 · 255 阅读 · 0 评论