21xrx.com
2025-03-25 17:53:56 Tuesday
文章检索 我的文章 写文章
Java设计模式课程的启示:从代码案例学习设计模式
2023-06-16 16:41:42 深夜i     22     0
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;
  }
}

在这个例子中,我们使用了双重检查锁定的方式来实现单例模式,这是一种线程安全且高效的实现方式。

二、观察者模式

观察者模式是一种常见的事件处理方式,它可以实现对象之间的松耦合和高内聚。以下是一个简单的观察者模式的代码案例:

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

在这个例子中,我们定义了Subject和Observer两个接口,并实现了一个具体的ConcreteSubject类和ConcreteObserver类。当Subject对象状态发生改变时,它会通知所有的Observer对象,从而实现了观察者模式。

三、工厂模式

工厂模式是一种常见的对象创建方式,它可以实现对象的抽象和创建的分离。以下是一个简单的工厂模式的代码案例:

public interface Car {
  void drive();
}
public class Benz implements Car {
  @Override
  public void drive() {
    System.out.println("Drive Benz.");
  }
}
public class Bmw implements Car {
  @Override
  public void drive() {
    System.out.println("Drive Bmw.");
  }
}
public interface CarFactory {
  Car createCar();
}
public class BenzFactory implements CarFactory {
  @Override
  public Car createCar() {
    return new Benz();
  }
}
public class BmwFactory implements CarFactory {
  @Override
  public Car createCar() {
    return new Bmw();
  }
}

在这个例子中,我们定义了Car和CarFactory两个接口,并实现了两个具体的Car对象Benz和Bmw以及两个具体的CarFactory工厂对象BenzFactory和BmwFactory。当我们需要创建Car对象时,只需要通过对应的工厂对象来得到相应的实例。

  
  

评论区