java 23种设计模式

原创admin 分类:热门问答 0

java 23种设计模式
在软件开发中,设计模式是解决特定问题的通用解决方案。它们是软件工程中经过时间考验的经验和智慧的结晶。Java作为一种广泛使用的编程语言,其设计模式的实现对于开发者来说尤为重要。以下是两种设计模式的详细解析和代码案例。

单例模式(Singleton Pattern)

单例模式确保一个类只有一个实例,并提供一个全局访问点。它在控制对象数量时非常有用,例如线程池、缓存等。

定义与目的: 单例模式的核心在于控制对象的创建,确保一个类只有一个实例。它通过私有化构造函数和提供一个全局访问点来实现。

条件:

  • 一个类只能有一个实例。
  • 必须提供一个全局访问点。

区别与不同: 单例模式与多例模式的主要区别在于实例的数量。多例模式允许一个类有多个实例,而单例模式只允许一个。

核心类与方法: 单例类通常包含一个私有的静态实例变量、一个私有的构造函数和一个公有的静态方法来获取实例。

使用场景: 当需要全局访问一个对象,并且该对象只需要一个实例时,单例模式非常适用。

代码案例:

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

观察者模式(Observer Pattern)

观察者模式定义了对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

定义与目的: 观察者模式用于实现事件多级触发机制,允许对象在内部状态改变时,通知其他对象。

条件:

  • 一个对象的改变需要触发其他对象的改变。
  • 需要一种机制来注册和注销观察者。

区别与不同: 观察者模式与发布/订阅模式类似,但后者通常用于消息队列和事件驱动架构中,而观察者模式更侧重于对象之间的直接通知。

核心类与方法: 核心类包括主题(Subject)、观察者(Observer)和具体观察者(Concrete Observer)。主题负责管理观察者列表,观察者定义了更新接口,具体观察者实现了更新逻辑。

使用场景: 当一个对象的改变需要同时改变其他对象时,观察者模式是一个很好的选择。

代码案例:

// 主题接口
interface Subject {
    void registerObserver(Observer o);
    void removeObserver(Observer o);
    void notifyObservers();
}

// 观察者接口
interface Observer {
    void update(String message);
}

// 具体主题
class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
        notifyObservers();
    }

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

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

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

// 具体观察者
class ConcreteObserver implements Observer {
    private ConcreteSubject subject;

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

    @Override
    public void update(String message) {
        System.out.println("Received message: " + message);
    }
}

// 使用场景
public class ObserverPatternExample {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();
        ConcreteObserver observer = new ConcreteObserver(subject);

        subject.setState("New State");
    }
}

总结

设计模式是解决特定问题的模板,它们提供了一种思考和沟通软件设计问题的方式。单例模式和观察者模式是Java中常用的两种设计模式,分别适用于控制对象实例数量和实现对象间的依赖关系管理。通过理解每种模式的定义、目的、条件、核心类与方法以及使用场景,开发者可以更有效地应用这些模式来解决实际问题。

表格:设计模式对比

特性 单例模式 观察者模式
目的 控制对象实例数量 实现对象间的一对多依赖关系
实例数量 一个 多个
核心类 Singleton Subject, Observer
更新机制 无状态变化,无需通知 状态变化时通知所有观察者
使用场景 全局访问点,如配置管理器 事件触发,如用户界面更新
优点 减少资源消耗,如内存 松耦合,易于扩展
缺点 难以测试,违反开放-封闭原则 循环依赖可能导致内存泄漏

通过上述表格,我们可以看到单例模式和观察者模式在特性、核心类、更新机制、使用场景、优点和缺点上的区别。每种模式都有其特定的应用场景和优势,开发者应根据实际需求选择最合适的设计模式。

猜你喜欢

领取相关Java架构师视频资料

网络安全学习平台视频资料