21xrx.com
2024-12-22 23:22:59 Sunday
登录
文章检索 我的文章 写文章
深入解析Java中的设计模式及应用案例
2023-06-13 11:54:11 深夜i     --     --
Java 设计模式 代码案例

设计模式是一系列被反复使用的通用解决方案。在Java中,设计模式旨在帮助程序员解决日常开发中遇到的问题并提高代码的可重用性和可维护性。本文将深入解析Java中的设计模式,探讨每种设计模式的应用场景以及相应的代码案例。

1. 单例模式

单例模式是一种创建型设计模式。它保证一个类只有一个实例,并提供一个全局访问点。单例模式在多线程环境下十分有用,可以避免多个线程同时访问同一实例造成的线程安全问题。

下面是一个简单的单例模式示例代码:

public class Singleton {

  private static Singleton instance = null;

  private Singleton() {}

  public static synchronized Singleton getInstance() {

    if (instance == null) {

      instance = new Singleton();

    }

    return instance;

  }

}

2. 工厂模式

工厂模式是一种创建型设计模式。它定义了一个用于创建对象的接口,但让子类决定将哪一个类实例化。工厂模式可以减少类之间的依赖关系,提高代码的可扩展性。

下面是一个简单的工厂模式示例代码:

public abstract class Animal {

  public abstract void makeSound();

}

public class Dog extends Animal {

  @Override

  public void makeSound() {

    System.out.println("汪汪汪!");

  }

}

public class Cat extends Animal {

  @Override

  public void makeSound() {

    System.out.println("喵喵喵!");

  }

}

public class AnimalFactory {

  public Animal getAnimal(String type) {

    if ("dog".equals(type)) {

      return new Dog();

    } else if ("cat".equals(type)) {

      return new Cat();

    } else

      return null;

  }

}

3. 观察者模式

观察者模式是一种行为型设计模式。它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并自动更新。观察者模式可以降低系统的耦合度,提高代码的灵活性。

下面是一个简单的观察者模式示例代码:

public interface Observer {

  void update(String message);

}

public class User implements Observer {

  private String name;

  public User(String name)

    this.name = name;

  @Override

  public void update(String message) {

    System.out.println(name + " 收到新消息:" + message);

  }

}

public interface Subject {

  void registerObserver(Observer observer);

  void removeObserver(Observer observer);

  void notifyObservers(String message);

}

public class WeChat implements Subject {

  private List observers = new ArrayList<>();

  @Override

  public void registerObserver(Observer observer) {

    observers.add(observer);

  }

  @Override

  public void removeObserver(Observer observer) {

    observers.remove(observer);

  }

  @Override

  public void notifyObservers(String message) {

    for (Observer observer : observers) {

      observer.update(message);

    }

  }

}

  
  

评论区

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