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
7301、开闭原则(Open Close Principle)
831
9- 开闭原则就是说 ** 对扩展开放 ,对修改关闭** 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
32+ 开闭原则就是说对扩展开放 ,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
1033
11342、里氏代换原则(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
266289BufferedReader 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
353376https://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