Skip to content

Commit fdb3cf0

Browse files
Update 设计模式.md
1 parent 05d2658 commit fdb3cf0

File tree

1 file changed

+36
-13
lines changed

1 file changed

+36
-13
lines changed

设计模式.md

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,35 @@
1-
#### 1.**接口是什么?为什么要使用接口而不是直接使用具体类?**
1+
## 设计模式
2+
3+
4+
* [1.接口是什么?为什么要使用接口而不是直接使用具体类?](#1接口是什么为什么要使用接口而不是直接使用具体类)
5+
* [2.设计模式六大原则?](#2设计模式六大原则)
6+
* [3.Java怎么实现单例模式?](#3java怎么实现单例模式)
7+
* [4.什么是代理模式?什么是动态代理?Java中动态代理有哪些实现方式?](#4什么是代理模式什么是动态代理java中动态代理有哪些实现方式)
8+
* [5.设计模式的类型](#5设计模式的类型)
9+
* [6.说说你所熟悉或听说过的 j2ee 中的几种常用模式?](#6说说你所熟悉或听说过的-j2ee-中的几种常用模式)
10+
* [7.简述一下你了解的 Java 设计模式(总结)](#7简述一下你了解的-java-设计模式总结)
11+
* [8.适配器模式是什么?什么时候使用?](#8适配器模式是什么什么时候使用)
12+
* [9.适配器模式与装饰器模式有什么区别?](#9适配器模式与装饰器模式有什么区别)
13+
* [10.适配器模式和代理模式之间有什么不同?](#10适配器模式和代理模式之间有什么不同)
14+
* [11.什么是模板方法模式?试举例说明。](#11什么是模板方法模式试举例说明)
15+
* [12.OOP中的组合、聚合和关联有什么区别?](#12oop中的组合聚合和关联有什么区别)
16+
* [13.给我一个符合开闭原则的设计模式的例子?](#13给我一个符合开闭原则的设计模式的例子)
17+
* [14.工厂模式与抽象工厂模式的区别?](#14工厂模式与抽象工厂模式的区别)
18+
* [15.举出一个例子,在这种情况你会更倾向于使用抽象类,而不是接口?](#15举出一个例子在这种情况你会更倾向于使用抽象类而不是接口)
19+
* [16.Dubbo 源码使用了哪些设计模式?](#16dubbo-源码使用了哪些设计模式)
20+
* [17.Spring 当中用到了哪些设计模式?](#17spring-当中用到了哪些设计模式)
21+
* [参考链接](#参考链接)
22+
23+
24+
#### 1.接口是什么?为什么要使用接口而不是直接使用具体类?
225

326
接口用于定义 API。它定义了类必须得遵循的规则。同时,它提供了一种抽象,因为客户端只使用接口,这样可以有多重实现,如 List 接口,你可以使用可随机访问的 ArrayList,也可以使用方便插入和删除的 LinkedList。接口中不允许写代码,以此来保证抽象,但是 Java 8 中你可以在接口声明静态的默认方法,这种方法是具体的。
427

528
#### 2.设计模式六大原则?
629

730
1、开闭原则(Open Close Principle)
831

9-
开闭原则就是说**对扩展开放,对修改关闭**。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
32+
开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
1033

1134
2、里氏代换原则(Liskov Substitution Principle)
1235

@@ -184,14 +207,14 @@ public class Singleton
184207

185208
#### 5.设计模式的类型
186209

187-
根据设计模式的参考书 **Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)** 中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。当然,我们还会讨论另一类设计模式:J2EE 设计模式。
210+
根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。当然,我们还会讨论另一类设计模式:J2EE 设计模式。
188211

189212
| 序号 | 模式 & 描述 | 包括 |
190213
| :--- | :----------------------------------------------------------- | :----------------------------------------------------------- |
191-
| 1 | **创建型模式** 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 | 工厂模式(Factory Pattern)抽象工厂模式(Abstract Factory Pattern)单例模式(Singleton Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern) |
192-
| 2 | **结构型模式** 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 | 适配器模式(Adapter Pattern)桥接模式(Bridge Pattern)过滤器模式(Filter、Criteria Pattern)组合模式(Composite Pattern)装饰器模式(Decorator Pattern)外观模式(Facade Pattern)享元模式(Flyweight Pattern)代理模式(Proxy Pattern) |
193-
| 3 | **行为型模式** 这些设计模式特别关注对象之间的通信。 | 责任链模式(Chain of Responsibility Pattern)命令模式(Command Pattern)解释器模式(Interpreter Pattern)迭代器模式(Iterator Pattern)中介者模式(Mediator Pattern)备忘录模式(Memento Pattern)观察者模式(Observer Pattern)状态模式(State Pattern)空对象模式(Null Object Pattern)策略模式(Strategy Pattern)模板模式(Template Pattern)访问者模式(Visitor Pattern) |
194-
| 4 | **J2EE 模式** 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 | MVC 模式(MVC Pattern)业务代表模式(Business Delegate Pattern)组合实体模式(Composite Entity Pattern)数据访问对象模式(Data Access Object Pattern)前端控制器模式(Front Controller Pattern)拦截过滤器模式(Intercepting Filter Pattern)服务定位器模式(Service Locator Pattern)传输对象模式(Transfer Object Pattern) |
214+
| 1 | 创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 | 工厂模式(Factory Pattern)抽象工厂模式(Abstract Factory Pattern)单例模式(Singleton Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern) |
215+
| 2 | 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 | 适配器模式(Adapter Pattern)桥接模式(Bridge Pattern)过滤器模式(Filter、Criteria Pattern)组合模式(Composite Pattern)装饰器模式(Decorator Pattern)外观模式(Facade Pattern)享元模式(Flyweight Pattern)代理模式(Proxy Pattern) |
216+
| 3 | 行为型模式 这些设计模式特别关注对象之间的通信。 | 责任链模式(Chain of Responsibility Pattern)命令模式(Command Pattern)解释器模式(Interpreter Pattern)迭代器模式(Iterator Pattern)中介者模式(Mediator Pattern)备忘录模式(Memento Pattern)观察者模式(Observer Pattern)状态模式(State Pattern)空对象模式(Null Object Pattern)策略模式(Strategy Pattern)模板模式(Template Pattern)访问者模式(Visitor Pattern) |
217+
| 4 | J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 | MVC 模式(MVC Pattern)业务代表模式(Business Delegate Pattern)组合实体模式(Composite Entity Pattern)数据访问对象模式(Data Access Object Pattern)前端控制器模式(Front Controller Pattern)拦截过滤器模式(Intercepting Filter Pattern)服务定位器模式(Service Locator Pattern)传输对象模式(Transfer Object Pattern) |
195218

196219
#### 6.说说你所熟悉或听说过的 j2ee 中的几种常用模式?
197220

@@ -234,11 +257,11 @@ Spring 中根据不同配置方式进行初始化的策略模式
234257
迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。
235258
```
236259

237-
#### 8.**适配器模式是什么?什么时候使用?**
260+
#### 8.适配器模式是什么?什么时候使用?
238261

239262
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。适配器模式提供对接口的转换。如果你的客户端使用某些接口,但是你有另外一些接口,你就可以写一个适配去来连接这些接口。
240263

241-
#### 9.**适配器模式与装饰器模式有什么区别?**
264+
#### 9.适配器模式与装饰器模式有什么区别?
242265

243266
虽然适配器模式和装饰器模式的结构类似,但是每种模式的出现意图不同。适配器模式被用于桥接两个接口,而装饰模式的目的是在不修改类的情况下给类增加新的功能。
244267

@@ -265,7 +288,7 @@ InputStreamReader inputStreamReader = new InputStreamReader(fileInput);
265288

266289
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);构造了缓冲字符流,将FileInputStream字节流包装为BufferedReader过程就是装饰的过程,刚开始的字节流FileInputStream只有read一个字节的方法,包装为inputStreamReader后,就有了读取一个字符的功能,在包装为BufferedReader后,就拥有了read一行字符的功能。
267290

268-
#### 10.**适配器模式和代理模式之间有什么不同?**
291+
#### 10.适配器模式和代理模式之间有什么不同?
269292

270293
这个问题与前面的类似,适配器模式和代理模式的区别在于他们的意图不同。由于适配器模式和代理模式都是封装真正执行动作的类,因此结构是一致的,但是适配器模式用于接口之间的转换,而代理模式则是增加一个额外的中间层,以便支持分配、控制或智能访问。
271294

@@ -277,13 +300,13 @@ BufferedReader bufferedReader=new BufferedReader(inputStreamReader);构造了缓
277300

278301
如果两个对象彼此有关系,就说他们是彼此相关联的。组合和聚合是面向对象中的两种形式的关联。组合是一种比聚合更强力的关联。组合中,一个对象是另一个的拥有者,而聚合则是指一个对象使用另一个对象。如果对象 A 是由对象 B 组合的,则 A 不存在的话,B一定不存在,但是如果 A 对象聚合了一个对象 B,则即使 A 不存在了,B 也可以单独存在。
279302

280-
#### 13.**给我一个符合开闭原则的设计模式的例子?**
303+
#### 13.给我一个符合开闭原则的设计模式的例子?
281304

282305
开闭原则要求你的代码对扩展开放,对修改关闭。这个意思就是说,如果你想增加一个新的功能,你可以很容易的在不改变已测试过的代码的前提下增加新的代码。有好几个设计模式是基于开闭原则的,如策略模式,如果你需要一个新的策略,只需要实现接口,增加配置,不需要改变核心逻辑。一个正在工作的例子是 Collections.sort() 方法,这就是基于策略模式,遵循开闭原则的,你不需为新的对象修改 sort() 方法,你需要做的仅仅是实现你自己的 Comparator 接口。
283306

284307

285308

286-
#### 14.**工厂模式与抽象工厂模式的区别?**
309+
#### 14.工厂模式与抽象工厂模式的区别?
287310

288311
首先来看看这两者的定义区别:
289312

@@ -352,4 +375,4 @@ https://ld246.com/article/1583476977456
352375

353376
https://www.runoob.com/design-pattern/design-pattern-tutorial.html
354377

355-
https://creativecommons.org/licenses/by-sa/4.0/
378+
https://creativecommons.org/licenses/by-sa/4.0/

0 commit comments

Comments
 (0)