Java设计模式图:深入理解设计模式

在软件开发中,设计模式是一种被反复使用、经过分类的代码设计经验的总结。使用设计模式可以解决软件设计中一些常见问题,提高代码的可复用性、可维护性和灵活性。本文将通过Java设计模式图,深入理解设计模式,并提供代码示例。

设计模式的分类

设计模式主要分为三大类:

  1. 创建型模式:用于创建对象,同时隐藏创建逻辑,使系统在运行时更加灵活。
  2. 结构型模式:用于处理类和对象的组合,形成更大的结构。
  3. 行为型模式:用于描述类和对象如何交互,以及如何分配职责。

创建型模式

创建型模式包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。以下是单例模式的代码示例:

public class Singleton {
    private static Singleton instance;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

结构型模式

结构型模式包括适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式和享元模式。以下是装饰器模式的代码示例:

public interface Component {
    void operate();
}

public class ConcreteComponent implements Component {
    @Override
    public void operate() {
        System.out.println("ConcreteComponent operate");
    }
}

public abstract class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void operate() {
        component.operate();
    }
}

public class ConcreteDecoratorA extends Decorator {
    public ConcreteDecoratorA(Component component) {
        super(component);
    }

    @Override
    public void operate() {
        super.operate();
        addedBehavior();
    }

    private void addedBehavior() {
        System.out.println("ConcreteDecoratorA added behavior");
    }
}

行为型模式

行为型模式包括策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式和备忘录模式。以下是观察者模式的代码示例:

public interface Observer {
    void update();
}

public interface Subject {
    void registerObserver(Observer o);
    void removeObserver(Observer o);
    void notifyObservers();
}

public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();

    @Override
    public void registerObserver(Observer o) {
        observers.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        observers.remove(o);
    }

    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update();
        }
    }
}

public class ConcreteObserver implements Observer {
    private ConcreteSubject subject;

    public ConcreteObserver(ConcreteSubject subject) {
        this.subject = subject;
    }

    @Override
    public void update() {
        System.out.println("ConcreteObserver update");
    }
}

项目进度

以下是项目进度的甘特图:

gantt
    title 项目进度
    dateFormat  YYYY-MM-DD
    section 设计模式学习
    创建型模式 :done, des1, 2023-03-01,2023-03-05
    结构型模式 :done, des2, after des1, 3d
    行为型模式 :done, des3, after des2, 3d

关系图

以下是创建型模式、结构型模式和行为型模式之间的关系图:

erDiagram
    CREATETYPE ||--o| SINGLETON
    CREATETYPE ||--o| FACTORYMETHOD
    CREATETYPE ||--o| ABSTRACTFACTORY
    CREATETYPE ||--o| BUILDER
    CREATETYPE ||--o| PROTOTYPE
    STRUCTURETYPE ||--o| ADAPTER
    STRUCTURETYPE ||--o| DECORATOR
    STRUCTURETYPE ||--o| PROXY
    STRUCTURETYPE ||--o| FACADE
    STRUCTURETYPE ||--o| BRIDGE
    STRUCTURETYPE ||--o| COMPOSITE
    STRUCTURETYPE ||--o| FLYWEIGHT
    BEHAVIORTYPE ||--o| STRATEGY
    BEHAVIORTYPE ||--o| TEMPLATEMETHOD
    BEHAVIORTYPE ||--o| OBSERVER
    BEHAVIORTYPE ||--o| ITERATOR
    BEHAVIORTYPE ||--o| CHAINRESPONSIBILITY
    BEHAVIORTYPE ||--o| COMMAND
    BEHAVIORTYPE ||--o| MEMENTO