21xrx.com
2024-11-05 19:41:23 Tuesday
登录
文章检索 我的文章 写文章
Java设计模式课程的启示:从代码案例学习设计模式
2023-06-16 16:41:42 深夜i     --     --
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;

  }

}

在这个例子中,我们使用了双重检查锁定的方式来实现单例模式,这是一种线程安全且高效的实现方式。

二、观察者模式

观察者模式是一种常见的事件处理方式,它可以实现对象之间的松耦合和高内聚。以下是一个简单的观察者模式的代码案例:


public interface Subject {

  void attach(Observer observer);

  void detach(Observer observer);

  void notifyObservers();

}

public interface Observer {

  void update();

}

public class ConcreteSubject implements Subject {

  private List observers = new ArrayList<>();

  @Override

  public void attach(Observer observer) {

    observers.add(observer);

  }

  @Override

  public void detach(Observer observer) {

    observers.remove(observer);

  }

  @Override

  public void notifyObservers() {

    for (Observer observer : observers) {

      observer.update();

    }

  }

}

public class ConcreteObserver implements Observer {

  private Subject subject;

  public ConcreteObserver(Subject subject)

    this.subject = subject;

  

  @Override

  public void update() {

    System.out.println("Subject has changed.");

  }

}

在这个例子中,我们定义了Subject和Observer两个接口,并实现了一个具体的ConcreteSubject类和ConcreteObserver类。当Subject对象状态发生改变时,它会通知所有的Observer对象,从而实现了观察者模式。

三、工厂模式

工厂模式是一种常见的对象创建方式,它可以实现对象的抽象和创建的分离。以下是一个简单的工厂模式的代码案例:


public interface Car {

  void drive();

}

public class Benz implements Car {

  @Override

  public void drive() {

    System.out.println("Drive Benz.");

  }

}

public class Bmw implements Car {

  @Override

  public void drive() {

    System.out.println("Drive Bmw.");

  }

}

public interface CarFactory {

  Car createCar();

}

public class BenzFactory implements CarFactory {

  @Override

  public Car createCar() {

    return new Benz();

  }

}

public class BmwFactory implements CarFactory {

  @Override

  public Car createCar() {

    return new Bmw();

  }

}

在这个例子中,我们定义了Car和CarFactory两个接口,并实现了两个具体的Car对象Benz和Bmw以及两个具体的CarFactory工厂对象BenzFactory和BmwFactory。当我们需要创建Car对象时,只需要通过对应的工厂对象来得到相应的实例。

  
  

评论区

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