- 博客(11)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 王争老师设计模式-门面模式:如何设计合理的接口粒度以兼顾接口的易用性和通用性?
面我们已经学习了代理模式、桥接模式、装饰器模式、适配器模式,这 4 种结构型设计模式。今天,我们再来学习一种新的结构型模式:门面模式。门面模式原理和实现都特别简单,应用场景也比较明确,主要在接口设计方面使用。如果你平时的工作涉及接口开发,不知道你有没有遇到关于接口粒度的问题呢?为了保证接口的可复用性(或者叫通用性),我们需要将接口尽量设计得细粒度一点,职责单一一点。但是,如果接口的粒度过小,在接口...
2020-04-12 09:47:08
250
原创 王争老师设计模式-适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别?
前面几节课我们学习了代理模式、桥接模式、装饰器模式,今天,我们再来学习一个比较常用的结构型模式:适配器模式。这个模式相对来说还是比较简单、好理解的,应用场景也很具体,总体上来讲比较好掌握。关于适配器模式,今天我们主要学习它的两种实现方式,类适配器和对象适配器,以及 5 种常见的应用场景。同时,我还会通过剖析 slf4j 日志框架,来给你展示这个模式在真实项目中的应用。除此之外,在文章的最后,我...
2020-04-12 09:40:33
273
原创 王争老师设计模式-装饰器模式:通过剖析Java IO类库源码学习装饰器模式
今天,我们通过剖析 Java IO 类的设计思想,再学习一种新的结构型模式,装饰器模式。它的代码结构跟桥接模式非常相似,不过,要解决的问题却大不相同。Java IO 类的“奇怪”用法Java IO 类库非常庞大和复杂,有几十个类,负责 IO 数据的读取和写入。如果对 Java IO 类做一下分类,我们可以从下面两个维度将它划分为四类。具体如下所示:针对不同的读取和写入场景,Java...
2020-04-12 09:36:10
229
原创 王争老师设计模式-桥接模式:如何实现支持不同类型和渠道的消息推送系统?
桥接模式的代码实现非常简单,但是理解起来稍微有点难度,并且应用场景也比较局限,所以,相当于代理模式来说,桥接模式在实际的项目中并没有那么常用,你只需要简单了解,见到能认识就可以,并不是我们学习的重点。桥接模式的原理解析桥接模式,也叫作桥梁模式,英文是 Bridge Design Pattern。这个模式可以说是 23 种设计模式中最难理解的模式之一了。我查阅了比较多的书籍和资料之后发现,对于...
2020-04-10 16:44:50
412
原创 王争老师设计模式-代理模式:代理在RPC、缓存、监控等场景中的应用
结构型模式主要总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。结构型模式包括:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式。今天我们要讲其中的代理模式。它也是在实际开发中经常被用到的一种设计模式。代理模式的原理解析代理模式(Proxy Design Pattern)的原理和代码实现都不难掌握。它在不改变原始类(或叫被代理类)代码...
2020-04-10 11:52:20
309
原创 王争老师设计模式-工厂模式-下 如何设计实现一个Dependency Injection框架?
在上一节课我们讲到,当创建对象是一个“大工程”的时候,我们一般会选择使用工厂模式,来封装对象复杂的创建过程,将对象的创建和使用分离,让代码更加清晰。那何为“大工程”呢?上一节课中我们讲了两种情况,一种是创建过程涉及复杂的 if-else 分支判断,另一种是对象创建需要组装多个其他类对象或者需要复杂的初始化过程。今天,我们再来讲一个创建对象的“大工程”,依赖注入框架,或者叫依赖注入容器(Depe...
2020-04-08 14:04:43
458
原创 王争老师设计模式-工厂模式-上 我为什么说没事不要随便用工厂模式创建对象?
一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在 GoF 的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。实际上,前面一种分类方法更加常见,所以,在今天的讲解中,我们沿用第一种分类方法。在这三种细分的工厂模式中,简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点...
2020-04-08 11:37:18
280
原创 王争老师设计模式-单例-上
要实现一个单例,我们需要关注的点无外乎下面几个:构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例; 考虑对象创建时的线程安全问题; 考虑是否支持延迟加载; 考虑 getInstance() 性能是否高(是否加锁)。1. 饿汉式 饿汉式的实现方式比较简单。在类加载的时候,instance 静态实例就已经创建并初始化好了,所以,insta...
2020-04-08 09:22:08
184
原创 王争老师设计模式-单例-中;我为什么不推荐使用单例模式?又有何替代方案?
单例存在哪些问题?1. 单例对 OOP 特性的支持不友好我们知道,OOP 的四大特性是封装、抽象、继承、多态。单例这种设计模式对于其中的抽象、继承、多态都支持得不好。为什么这么说呢?我们还是通过 IdGenerator 这个例子来讲解。public class Order { public void create(...) { //... long id = IdGe...
2020-04-08 09:21:57
327
原创 王争老师设计模式-单例-下 如何设计实现一个集群环境下的分布式单例模式?
如何理解单例模式中的唯一性?首先,我们重新看一下单例的定义:“一个类只允许创建唯一一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。”定义中提到,“一个类只允许创建唯一一个对象”。那对象的唯一性的作用范围是什么呢?是指线程内只允许创建一个对象,还是指进程内只允许创建一个对象?答案是后者,也就是说,单例模式创建的对象是进程唯一的。这里有点不好理解,我...
2020-04-08 09:21:44
779
Java调用Webservice数组参数传递有问题
2011-08-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人