21xrx.com
2024-12-22 23:07:48 Sunday
登录
文章检索 我的文章 写文章
Java常见的设计模式及案例分析
2023-06-16 11:25:02 深夜i     --     --
Java 设计模式 单例模式 工厂模式 观察者模式

设计模式是一种经过总结、优化而得出来的通用解决方案,它是解决某一类问题的一种套路。在Java编程中,设计模式是每个开发者所必须掌握的一项基本技能。在本文中,我们将介绍Java中常见的设计模式,并给出相应的代码案例。

一、单例模式

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个访问该实例的全局访问点。单例模式通常通过私有构造函数、静态变量和静态方法来实现。在Java中,可以使用以下代码创建一个单例类:


public class Singleton {

  private static volatile Singleton instance;

  private Singleton()

  

  public static Singleton getInstance() {

    if (instance == null) {

      synchronized (Singleton.class) {

        if (instance == null) {

          instance = new Singleton();

        }

      }

    }

    return instance;

  }

}

二、工厂模式

工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。工厂模式封装了对象的创建过程,并对外提供统一的接口。在Java中,可以使用以下代码创建一个工厂类:


public interface Product {

  void produce();

}

public class ProductA implements Product {

  @Override

  public void produce() {

    System.out.println("ProductA produced.");

  }

}

public class ProductB implements Product {

  @Override

  public void produce() {

    System.out.println("ProductB produced.");

  }

}

public class Factory {

  public static Product getProduct(String type) {

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

      return new ProductA();

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

      return new ProductB();

    } else

      return null;

    

  }

}

三、观察者模式

观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时,它的所有观察者将会收到通知并更新。在Java中,可以使用以下代码创建一个观察者模式:


public interface Observer {

  void update();

}

public class Subject {

  private List observers = new ArrayList<>();

  public void attach(Observer observer) {

    observers.add(observer);

  }

  public void detach(Observer observer) {

    observers.remove(observer);

  }

  public void notifyObservers() {

    for (Observer observer : observers) {

      observer.update();

    }

  }

}

public class ConcreteObserver implements Observer {

  @Override

  public void update() {

    System.out.println("Observer updated.");

  }

}

public class ConcreteSubject extends Subject {

  public void operation() {

    System.out.println("Subject operation.");

    notifyObservers();

  }

}

  
  

评论区

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