概述
为什么学习设计模式:为了代码优雅,复用,拓展性,易读性等等。
什么是设计模式:前辈们总结的,特定问题的代码设计方案,是一种优秀东西的传承。
原则:
- 单一职责原则
- 开放封闭原则(最好方式是提供一个固有的接口,然后让所有可能发生变化的类实现该接口,让固定的接口与相关对象进行交互)
- 里氏代替原则(子类必须替换掉它们的父类型)
- 依赖倒置原则(细节/实现应该依赖于抽象,而抽象不应该依赖于细节/实现)
- 接口隔离原则(使用多个专门功能的接口,而不是使用单一的总接口)
- 合成复用原则(新对象通过向这些对象的委派达到复用已用功能的目的。简单地说,就是要尽量使用合成/聚合,尽量不要使用继承)
-
最少知识原则(迪米特法则)(一个模块或对象应尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少,扩展起来更加容易)
分类:
1(创建型)单例模式 *****
https://blog.csdn.net/qq_25827845/article/details/51150165
饿汉式
//空间换时间方案
class Single{
private Single(){}
private static final Single single = new Single();
public static Single getInstance()
{
return s;
}
}
懒汉式(实例延迟加载)
//考虑线程安全,使用内部类实现
class Single{
private Single(){}
private static class Inner{
final static Single s = new Single();
}
public static Single getInstance(){
return Inner.s;
}
}
2(创建型)工厂方法模式 *****
https://blog.csdn.net/qq_25827845/article/details/52503884
3(创建型)抽象工厂模式 *****
https://blog.csdn.net/qq_25827845/article/details/52503884
4(创建型)建造者模式
https://blog.csdn.net/qq_25827845/article/details/52932495
5.(创建型)原型模式
https://blog.csdn.net/qq_25827845/article/details/52422098
6(结构型)适配器 *****
https://blog.csdn.net/lmb55/article/details/51008762
https://www.imooc.com/learn/146
https://blog.csdn.net/qq_25827845/article/details/51966534
7(结构型)桥梁模式
https://blog.csdn.net/qq_25827845/article/details/52490611
8(结构型)装饰器模式 *****
逐渐被代理模式替代
https://blog.csdn.net/wwh578867817/article/details/51480441
https://blog.csdn.net/qq_25827845/article/details/51570272
9(结构型)门面模式
https://blog.csdn.net/qq_25827845/article/details/52032536
10(结构型)合成模式
https://blog.csdn.net/qq_25827845/article/details/52496522
11(结构型)享元模式
https://blog.csdn.net/qq_25827845/article/details/52496622
12(结构型)代理模式 *****
https://www.cnblogs.com/cenyu/p/6289209.html(推荐)
https://www.imooc.com/learn/214
https://blog.csdn.net/qq_25827845/article/details/52452953
13(行为型)模板方法模式
https://blog.csdn.net/qq_25827845/article/details/51868973
模板方法模式
Abstract Class叫做抽象模板,它的方法分为两类:模板方法和基本方法。
基本方法:基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法中被调用。
模板方法:可以有一个或者几个,一般是具体的方法,实现对基本方法的调度,完成固定的逻辑。为了防止恶意的操作,一般模板方法前面会加上final关键字,不允许被覆写。
具体模板:ConcreteClass1和ConcreteClass2属于具体模板,实现父类所定义的一个或多个抽象方法,也就是父类定义的基本方法在子类中得以实现。
//抽象模板类
public abstract class AbstractClass {
//基本方法
protected abstract void doSomething();
//基本方法
protected abstract void doAnything();
//模板方法
public void templateMethod(){
/*
* 调用基本方法,完成相关的逻辑
*/
this.doAnything();
this.doSomething();
}
}
//具体模板类 还可以定义ConcreteClass2,3...
public class ConcreteClass1 extends AbstractClass {
//实现基本方法
protected void doAnything() {
//业务逻辑处理
}
protected void doSomething() {
//业务逻辑处理
}
}
public class Client {
public static void main(String[] args) {
AbstractClass class1 = new ConcreteClass1();
AbstractClass class2 = new ConcreteClass2();
//调用模板方法
class1.templateMethod();
class2.templateMethod();
}
}
14(行为型)命令模式
https://blog.csdn.net/qq_25827845/article/details/52446642
15(行为型)迭代器模式(不需要学习)
https://blog.csdn.net/qq_25827845/article/details/52496718
16(行为型)观察者模式 *****
https://www.imooc.com/learn/415
https://www.cnblogs.com/luohanguo/p/7825656.html
https://blog.csdn.net/qq_25827845/article/details/52414289
17(行为型)调停者模式
https://blog.csdn.net/qq_25827845/article/details/51925087
18(行为型)状态模式
https://blog.csdn.net/qq_25827845/article/details/52468077
19(行为型)策略模式 *****
https://blog.csdn.net/qq_25827845/article/details/51952823
https://blog.csdn.net/u012124438/article/details/70039943
https://www.imooc.com/learn/165
20(行为型)责任链模式
https://blog.csdn.net/qq_25827845/article/details/51959801
21(行为型)访问者模式
https://blog.csdn.net/qq_25827845/article/details/52061786
22(行为型)备忘录模式
https://blog.csdn.net/qq_25827845/article/details/52462246
23(行为型)解释器模式(不需要学习)
https://blog.csdn.net/qq_25827845/article/details/52496718
参考
https://blog.csdn.net/qq_25827845/article/details/52510803
https://www.jianshu.com/p/6e5eda3a51af