21xrx.com
2025-03-23 18:17:33 Sunday
文章检索 我的文章 写文章
Java开发中常用的设计模式及实例
2023-06-14 22:30:03 深夜i     --     --
Java 设计模式 单例模式 工厂模式 观察者模式

设计模式是在软件开发中常用的一种解决问题的方法论,它能够提供一套解决方案,使得开发者在面对某些特定的问题时,能够采取一种较为统一和规范的处理方式,在提高代码的性能和可维护性的同时,也节省了开发时间。Java作为当前互联网开发中最为流行的开发语言,自然也少不了设计模式的应用。本文将针对Java开发中常用的一些设计模式,为读者提供简洁明了的实例,方便读者更好的理解和应用。

一、单例模式

单例模式是一种比较常见的创建型模式,在Java的应用场景也很广泛,如线程池、数据库连接池等。它的主要特点是保证一个类在内存中仅有一个实例,并提供一个全局访问点,使得程序中的其他对象都可以访问到该实例。以下是单例模式的代码实现:

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

二、工厂模式

工厂模式是为了解决创建对象的问题而生的一种设计模式。它主要是将对象的创建过程抽象成一个工厂,由工厂去维护对象的创建过程,而客户端只需要向工厂发出请求即可,从而降低了客户端和具体实现的耦合度。以下是工厂模式的代码实现:

public interface Animal {
  void move();
}
public class Dog implements Animal{
  @Override
  public void move() {
    System.out.println("Dog is Running!");
  }
}
public class Cat implements Animal{
  @Override
  public void move() {
    System.out.println("Cat is Running!");
  }
}
public class AnimalFactory {
  public static Animal getAnimal(String typeName){
    if(typeName.equalsIgnoreCase("cat")){
      return new Cat();
    }else if(typeName.equalsIgnoreCase("dog")){
      return new Dog();
    }
    return null;
  }
}

三、观察者模式

观察者模式是一种比较常用的行为型设计模式,它主要是通过一种订阅-发布机制来实现对象之间的一种分离式的通信,并且使得观察者对象与被观察者对象之间的依赖关系得以解耦。以下是观察者模式的代码实现:

import java.util.ArrayList;
import java.util.List;
public interface Observer {
  void update(float temperature, float humidity);
}
public interface Subject {
  void registerObserver(Observer o);
  void removeObserver(Observer o);
  void notifyObservers();
}
public class WeatherData implements Subject{
  private float temperature;
  private float humidity;
  private List
  observers;
 
  public WeatherData(){
    observers = new ArrayList<>();
  }
  public void setMeasurements(float temperature, float humidity){
    this.temperature = temperature;
    this.humidity = humidity;
    notifyObservers();
  }
  @Override
  public void registerObserver(Observer o) {
    observers.add(o);
  }
  @Override
  public void removeObserver(Observer o) {
    int i = observers.indexOf(o);
    if(i>=0){
      observers.remove(i);
    }
  }
  @Override
  public void notifyObservers() {
    for(Observer o : observers){
      o.update(temperature, humidity);
    }
  }
}
public class CurrentConditionsDisplay implements Observer{
  private float temperature;
  private float humidity;
  private Subject weatherData;
  public CurrentConditionsDisplay(Subject weatherData){
    this.weatherData = weatherData;
    weatherData.registerObserver(this);
  }
  @Override
  public void update(float temperature, float humidity) {
    this.temperature = temperature;
    this.humidity = humidity;
    display();
  }
  public void display(){
    System.out.println("Current conditions : " + temperature + "F degrees and " + humidity + "% humidity");
  }
}

  
  

评论区