HeadFirst设计模式
1.策略模式(Strategy Pattern)
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于算法的客户。
2.观察者模式(Observer)
定义了对象之间的一对多依赖。当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
3.装饰者模式
动态地将责任附加在对象上。
装饰者和被装饰对象有相同的超类型。
4.工厂模式
定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。
工厂方法让类把实例化推迟到子类。
创建者Creator和产品类Products
抽象工厂模式
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
工厂模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
5.单件模式(Single Pattern)
确保一个类只有一个实例,并提供一个全局访问点。
//懒汉式单例类.在第一次调用的时候实例化自己
public class Singleton {
private Singleton() {}
private static Singleton single=null;
//静态工厂方法
public static Singleton getInstance() {
if(single ==null) {
single =new Singleton();
}
return single;
}
}
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single =new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。
6.命令模式
将“请求”封装成对象,以便使用不同的请求。
角色:
Command
定义命令的接口,声明执行的方法。
ConcreteCommand
命令接口实现对象,是“虚”的实现;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
Receiver
接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
Invoker
要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。
Client
创建具体的命令对象,并且设置命令对象的接收者。
7.适配器模式
将一个类的接口,转换成客户期望的另一个接口。
8.外观模式
提供一个统一的接口,用来访问子系统中的一群接口。