目录

· 总述

    · 记忆

    · 效果

    · 面向对象设计原则

· 创建型模式

    · 单例模式(Singleton)

        · 效果

        · 分类

        · 代码(饿汉式)

        · 代码(懒汉式)

        · 代码(双重检测锁式)

        · 代码(静态内部类式)

        · 代码(枚举单例)

        · 代码(使用反射的破解与防御)

        · 代码(使用序列化的破解与防御)

        · 应用场景

    · 工厂模式

        · 效果

        · 分类

        · 代码(简单工厂)

        · 代码(工厂方法)

        · 代码(抽象工厂)

        · 应用场景

    · 构建者模式(Builder)

        · 效果

        · 代码

        · 应用场景

    · 原型模式(Prototype)

        · 效果

        · 核心角色

        · 代码(浅克隆)

        · 代码(基于JDK的深克隆)

        · 代码(基于序列化的深克隆)

        · 应用场景

· 结构型模式

    · 适配器模式(Adapter)

        · 效果

        · 核心角色

        · 分类

        · 代码(使用继承)

        · 代码(使用关联)

        · 应用场景

    · 代理模式(Proxy)

        · 效果

        · 核心角色

        · 分类

        · 代码(静态代理)

        · 代码(动态代理)

        · 应用场景

    · 桥接模式(Bridge)

        · 效果

        · 代码

        · 应用场景

    · 组合模式(Composite)

        · 效果

        · 核心角色

        · 代码

        · 代码(杀毒举例)

        · 应用场景

    · 装饰器模式(Decorator)

        · 效果

        · 核心角色

        · 代码

        · 应用场景

    · 外观模式(Facade)

        · 效果

        · 代码

        · 应用场景

    · 享元模式(FlyWeight)

        · 效果

        · 核心角色

        · 代码

        · 应用场景

· 行为型模式

    · 责任链模式(Chain of Resposibility)

        · 效果

        · 核心角色

        · 代码

        · 应用场景

    · 迭代器模式(Iterator)

        · 效果

        · 核心角色

        · 代码

        · 应用场景

    · 中介者模式(Mediator)

        · 效果

        · 代码

        · 应用场景

    · 命令模式(Command)

        · 效果

        · 核心角色

        · 代码

        · 应用场景

    · 解释器模式(Interpreter)

        · 效果

        · 应用场景

    · 访问者模式(Visitor)

        · 效果

        · 应用场景

    · 策略模式(Strategy)

        · 效果

        · 代码

        · 应用场景

    · 模板方法模式(Template Method)

        · 效果

        · 代码

        · 应用场景

    · 状态模式(State)

        · 效果

        · 核心角色

        · 代码

        · 应用场景

    · 观察者模式(Observer)

        · 效果

        · 代码

        · 代码(基于JDK)

        · 应用场景

    · 备忘录模式(Memento)

        · 效果

        · 核心角色

        · 代码

        · 应用场景


 

总述

记忆

1. 创建型:sbfp;

2. 结构型:abcdffp;

3. 行为型:iimmccsstov。

效果

1. 所有面向对象设计原则和设计模式都是为了降低代码耦合度,提高扩展性、复用,手段是“分工”。

2. 类似社会分工,现代社会比原始社会发展得大,也是因为分工。

面向对象设计原则 

首字母

代指

解释

S

单一功能原则(Single Responsibility Principle)

对象应该仅具有一种单一功能。

O

开闭原则(Open/Closed Principle)

软件体应该是对于扩展开放的,但是对于修改封闭的。

L

里氏替换原则(Liskov Substitution Principle)

程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的。

I

接口隔离原则(Interface Segregation Principle)

多个特定客户端接口要好于一个宽泛用途的接口。

D

依赖反转原则(Dependency Inversion Principle)

一个方法应该遵从依赖于抽象而不是一个实例

创建型模式

单例模式(Singleton)

效果

1. 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。

2. 由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。

分类

1. 常见实现方式。

    a) 饿汉式:线程安全,调用效率高,不能延时加载。

    b) 懒汉式:线程安全,调用效率不高,可延时加载。

2. 其他实现方式。

    a) 双重检测锁式:由于JVM底层内部模型原因,偶尔出问题,不建议使用。

    b) 静态内部类式:线程安全,调用效率高,可延时加载。

    c) 枚举单例:线程安全,调用效率高,不能延时加载。

3. 选择方法。

    a) 单例对象占用资源少,不需要延时加载:枚举式好于饿汉式;

    b) 单例对象占用资源多,需要延时加载:静态内部类好于懒汉式。

代码(饿汉式)

设计模式笔记——GoF设计模式汇总

1. Singleton.java

 1 public class Singleton {
 2 
 3     // 类初始化时立即创建对象
 4     private static final Singleton instance = new Singleton();
 5     
 6     // 私有化构造器
 7     private Singleton() {
 8         if (instance != null) {
 9             throw new RuntimeException();
10         }
11     }
12     
13     public static Singleton getInstance() {
14         return instance;
15     }
16     
17 }
View Code

相关文章: