21xrx.com
2025-03-27 13:37:25 Thursday
文章检索 我的文章 写文章
Java常用的设计模式及其实现
2023-06-15 07:50:20 深夜i     8     0
设计模式 Java编程 单例模式 工厂模式 观察者模式

在Java编程中,设计模式是一种常见的编程思想,它能够帮助程序员更好地设计程序。本文将介绍Java常见的设计模式,以及代码实现。

1.单例模式

单例模式是Java编程中最常见的一种设计模式。根据这种模式,一个类只能创建一个实例对象。这样可以避免在程序中不必要的对象创建和资源消耗。

代码实现:

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

2.工厂模式

工厂模式是Java编程中另外一种常见的设计模式。根据这种模式,在程序中使用工厂类来创建其它类的对象。这样可以解耦合程序中的对象创建和对象使用。

代码实现:

public interface Shape {
  void draw();
}
public class Rectangle implements Shape {
  @Override
  public void draw() {
    System.out.println("Rectangle::draw() method.");
  }
}
public class Square implements Shape {
  @Override
  public void draw() {
    System.out.println("Square::draw() method.");
  }
}
public class Circle implements Shape {
  @Override
  public void draw() {
    System.out.println("Circle::draw() method.");
  }
}
public class ShapeFactory {
  public Shape getShape(String shapeType) {
    if (shapeType == null)
      return null;
    
    if (shapeType.equalsIgnoreCase("CIRCLE")) {
      return new Circle();
    } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
      return new Rectangle();
    } else if (shapeType.equalsIgnoreCase("SQUARE")) {
      return new Square();
    }
    return null;
  }
}

3.观察者模式

观察者模式是Java编程中另外一种常见的设计模式。根据这种模式,在程序中,一个对象可以监控另外一个对象的状态,当被监控的对象状态发生改变时,监控对象就会得到通知。

代码实现:

public interface Subject {
  void registerObserver(Observer observer);
  void removeObserver(Observer observer);
  void notifyObservers();
}
public interface Observer {
  void update(double temperature, double humidity, double pressure);
}
public class WeatherData implements Subject {
  private double temperature;
  private double humidity;
  private double pressure;
  private List
  observers;
 
  public WeatherData() {
    observers = new ArrayList
  ();
 
  }
  @Override
  public void registerObserver(Observer observer) {
    observers.add(observer);
  }
  @Override
  public void removeObserver(Observer observer) {
    if (observers.indexOf(observer) >= 0) {
      observers.remove(observer);
    }
  }
  @Override
  public void notifyObservers() {
    for (Observer observer: observers) {
      observer.update(temperature, humidity, pressure);
    }
  }
  public void measurementsChanged() {
    notifyObservers();
  }
  public void setMeasurements(double temperature, double humidity, double pressure) {
    this.temperature = temperature;
    this.humidity = humidity;
    this.pressure = pressure;
    measurementsChanged();
  }
}
public class CurrentWeatherDisplay implements Observer {
  private double temperature;
  private double humidity;
  private double pressure;
  @Override
  public void update(double temperature, double humidity, double pressure) {
    this.temperature = temperature;
    this.humidity = humidity;
    this.pressure = pressure;
    display();
  }
  public void display() {
    System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity and " + pressure + "Pa pressure.");
  }
}

  
  

评论区