设计模式分类
创建者模式(5种)
- 单例模式
- 原型模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
结构型模式(7种)
- 代理模式
- 适配器模式
- 桥接模式
- 装饰者模式
- 外观模式
- 享元模式
- 组合模式
行为型模式(11种)
- 模板方法模式
- 策略模式
- 命令模式
- 职责链模式
- 状态模式
- 观察者模式
- 中介者模式
- 迭代器模式
- 访问者模式
- 备忘录模式
- 解释器模式
软件设计原则
- 开闭原则(对扩展开放,对修改关闭)
- 里氏代换原则(任何基类可以出现的地方,子类一定可以出现)
- 依赖倒转原则(高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象)
- 接口隔离原则(客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上)
- 迪米特法则(只和你的直接朋友交谈,不跟"陌生人"说话)
- 合成复用原则(尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现)
模式实现
1.创建者模式
1.1 单例设计模式
单例设计模式分类两种:
-
饿汉式:类加载就会导致该单实例对象被创建
-
方式1(静态变量方式)
-
方式2(静态代码块方式)
-
方式3(枚举方式)
-
-
懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建
-
方式1(线程不安全)
-
方式2(线程安全)
-
方式3(双重检查锁)
==改进:==如此指令有序,不会报空指针
-
方式4(静态内部类)
-
1.2 工厂设计模式
案例:咖啡店需求
-
简单工厂模式(不属于GOE的23种经典设计模式)
-
类图
-
优缺点
-
-
工厂方法模式
-
结构
-
实现
-
优缺点
-
-
抽象工厂模式
-
结构
-
实现
-
优缺点
-
使用场景
-
模式扩展
使用场景
2.结构型模式
2.1代理模式
-
概述
由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。
-
结构
-
实现
-
静态代理
-
JDK动态代理
Java中提供了一个动态代理类Proxy,Proxy并不是我们上述所说的代理对象的类,而是提供了一个创建代理对象的静态方法(newProxyInstance方法)来获取代理对象。
-
CGLIB动态代理
-
对比
-
-
优缺点
-
使用场景
3. 行为型模式
待更新...