【架构】设计原则和设计模式

44 阅读2分钟

参考:www.runoob.com/design-patt…

《设计模式:可复用面向对象软件的基础》

设计原则(6种)

1. 单一责任原则: 一个类应该只有一个引起变化的原因。换句话说,一个类应该只负责一项职责。

2. 开放-封闭原则: 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着可以通过扩展现有代码来实现新的功能,而不需要修改已有的代码。

3. 里氏替换原则: 子类型必须能够替换其基类型。换句话说,子类应该能够替换掉父类并且不影响程序的正确性。

4. 依赖倒置原则: 高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于具体实现细节,而具体实现细节应该依赖于抽象。

5. 接口隔离原则: 不应该强迫客户端依赖于他们不使用的接口。接口应该小而专一,而不是大而笨重。

6. 合成/聚合复用原则: 优先使用合成/聚合,而不是继承。通过将对象组合起来实现复用,而不是通过继承来获得复用。

创建型模式(5种)

  1. 单例模式

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;
    }
}
  1. 工厂模式

  2. 抽象工厂模式

  3. 建造者模式

  4. 原型模式

结构型模式(7种)

  1. 适配器模式

  2. 桥接模式

  3. 组合模式

  4. 装饰器模式

  5. 外观模式

  6. 享元模式

  7. 代理模式

行为型模式(11种)

  1. 责任链模式

  2. 命令模式

// 命令接口
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(); // 执行请求
    }
}
  1. 解释器模式

  2. 迭代器模式

  3. 中介者模式

  4. 备忘录模式

  5. 观察者模式

  6. 状态模式

  7. 策略模式

  8. 模板方法模式

  9. 访问者模式