21xrx.com
2024-12-22 18:58:48 Sunday
登录
文章检索 我的文章 写文章
Java常用的设计模式及其实现
2023-06-15 07:50:20 深夜i     --     --
设计模式 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.");

  }

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复