21xrx.com
2025-03-24 07:57:36 Monday
文章检索 我的文章 写文章
Java常见的设计模式及案例分析
2023-06-16 11:25:02 深夜i     --     --
Java 设计模式 单例模式 工厂模式 观察者模式

设计模式是一种经过总结、优化而得出来的通用解决方案,它是解决某一类问题的一种套路。在Java编程中,设计模式是每个开发者所必须掌握的一项基本技能。在本文中,我们将介绍Java中常见的设计模式,并给出相应的代码案例。

一、单例模式

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个访问该实例的全局访问点。单例模式通常通过私有构造函数、静态变量和静态方法来实现。在Java中,可以使用以下代码创建一个单例类:

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

二、工厂模式

工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。工厂模式封装了对象的创建过程,并对外提供统一的接口。在Java中,可以使用以下代码创建一个工厂类:

public interface Product {
  void produce();
}
public class ProductA implements Product {
  @Override
  public void produce() {
    System.out.println("ProductA produced.");
  }
}
public class ProductB implements Product {
  @Override
  public void produce() {
    System.out.println("ProductB produced.");
  }
}
public class Factory {
  public static Product getProduct(String type) {
    if ("A".equals(type)) {
      return new ProductA();
    } else if ("B".equals(type)) {
      return new ProductB();
    } else
      return null;
    
  }
}

三、观察者模式

观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时,它的所有观察者将会收到通知并更新。在Java中,可以使用以下代码创建一个观察者模式:

public interface Observer {
  void update();
}
public class Subject {
  private List
  observers = new ArrayList<>();
 
  public void attach(Observer observer) {
    observers.add(observer);
  }
  public void detach(Observer observer) {
    observers.remove(observer);
  }
  public void notifyObservers() {
    for (Observer observer : observers) {
      observer.update();
    }
  }
}
public class ConcreteObserver implements Observer {
  @Override
  public void update() {
    System.out.println("Observer updated.");
  }
}
public class ConcreteSubject extends Subject {
  public void operation() {
    System.out.println("Subject operation.");
    notifyObservers();
  }
}

  
  

评论区