21xrx.com
2024-09-19 09:04:41 Thursday
登录
文章检索 我的文章 写文章
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");

  }

}

  
  

评论区

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