参考:www.runoob.com/design-patt…
《设计模式:可复用面向对象软件的基础》
设计原则(6种)
1. 单一责任原则: 一个类应该只有一个引起变化的原因。换句话说,一个类应该只负责一项职责。
2. 开放-封闭原则: 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着可以通过扩展现有代码来实现新的功能,而不需要修改已有的代码。
3. 里氏替换原则: 子类型必须能够替换其基类型。换句话说,子类应该能够替换掉父类并且不影响程序的正确性。
4. 依赖倒置原则: 高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于具体实现细节,而具体实现细节应该依赖于抽象。
5. 接口隔离原则: 不应该强迫客户端依赖于他们不使用的接口。接口应该小而专一,而不是大而笨重。
6. 合成/聚合复用原则: 优先使用合成/聚合,而不是继承。通过将对象组合起来实现复用,而不是通过继承来获得复用。
创建型模式(5种)
- 单例模式
dcl : double check lock 双重检查锁机制
DCL单例为什么不安全
public class Singleton {
// 私有静态实例,防止被直接访问
private volatile static Singleton instance;
// 私有构造函数,防止被实例化
private Singleton() {}
// 公共静态方法,提供全局访问点
public static Singleton getInstance() {
// 如果实例为空,则创建实例
if (instance == null) {
// 同步代码块,确保线程安全
synchronized (Singleton.class) {
// 双重检查锁定(Double-Checked Locking)
// 如果实例仍然为空,则创建实例
if (instance == null) {
instance = new Singleton();
}
}
}
// 返回实例
return instance;
}
}
-
工厂模式
-
抽象工厂模式
-
建造者模式
-
原型模式
结构型模式(7种)
-
适配器模式
-
桥接模式
-
组合模式
-
装饰器模式
-
外观模式
-
享元模式
-
代理模式
行为型模式(11种)
-
责任链模式
-
命令模式
// 命令接口
public interface Command {
void execute();
}
// 具体的命令类,实现命令接口
public class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
receiver.action();
}
}
// 接收者类,知道如何执行与请求相关的操作
public class Receiver {
public void action() {
System.out.println("接收者执行操作...");
}
}
// 调用者类,持有命令对象,并可以执行命令
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void invoke() {
if (command != null) {
command.execute();
}
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker();
invoker.setCommand(command);
invoker.invoke(); // 执行请求
}
}
-
解释器模式
-
迭代器模式
-
中介者模式
-
备忘录模式
-
观察者模式
-
状态模式
-
策略模式
-
模板方法模式
-
访问者模式