首页 > 文章列表 > Java中的设计模式:典型示例

Java中的设计模式:典型示例

java 设计模式 示例
162 2023-06-15

设计模式是软件工程中一种经过实践验证的、被广泛采用的解决问题的方案。Java语言作为一种广泛应用的编程语言,在设计模式方面也有着自己的特点。本文将介绍Java中的常用设计模式,并通过典型示例来说明其实现方法及使用场景。

  1. 单例模式
    单例模式是一种保证一个类仅有一个实例,并提供一个访问它的全局访问点的设计模式。在Java中,单例模式的实现需要注意线程安全性。以下是单例模式的典型实现代码:
public class Singleton {
   private static Singleton instance = null;
   private Singleton() {}
   public static synchronized Singleton getInstance() {
      if (instance == null) {
         instance = new Singleton();
      }
      return instance;
   }
}

上述代码使用了synchronized关键字保证了线程安全。单例模式的常见应用场景包括线程池、缓存、日志、配置文件等。

  1. 工厂模式
    工厂模式是一种简单工厂模式和抽象工厂模式的组合。它可以动态创建对象,并且隐藏对象的创建过程,让客户端无需了解对象的创建过程,避免直接使用new关键字创建对象导致代码难以维护的问题。以下是工厂模式的典型实现代码:
public interface Shape {
  void draw();
}

public class Circle implements Shape {
  @Override
  public void draw() {
      System.out.println("Circle::draw()");
  }
}

public class Rectangle implements Shape {
  @Override
  public void draw() {
      System.out.println("Rectangle::draw()");
  }
}

public class ShapeFactory {
  public static Shape getShape(String shapeType){
    if(shapeType == null){
      return null;
    }        
    if(shapeType.equalsIgnoreCase("CIRCLE")){
      return new Circle();
    } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
      return new Rectangle();
    }
    return null;
  }
}

上述代码可以根据不同的形状类型创建不同的形状对象,通过工厂模式的设计,客户端只需要知道形状类型即可获得对应的形状对象。工厂模式的常用场景包括多态性设计、抽象工厂、动态加载等。

  1. 观察者模式
    观察者模式是对象间一种一对多的依赖关系,当一个对象改变状态时,所有依赖它的对象都会自动收到通知。在Java中,观察者模式的实现可以借助Java提供的Observer和Observable接口。以下是观察者模式的典型实现代码:
import java.util.Observable;
import java.util.Observer;

public class MyObserver implements Observer {
    public void update(Observable obs, Object arg) {
        System.out.println("MyObserver update:" + arg);
    }
}

public class MyObservable extends Observable {
    public void setValue(String value) {
        setChanged();
        notifyObservers(value);
    }
}

上述代码中,MyObserver实现了Observer接口的update()方法,而MyObservable则通过Observable提供的方法setChanged()和notifyObservers()方法来通知所有的观察者对象。观察者模式的常用场景包括事件监听、消息队列等。

  1. 装饰器模式
    装饰器模式是一种动态地给一个对象添加一些额外的职责的模式。在Java中,装饰器模式的实现可以利用继承和多态的特性来实现。以下是装饰器模式的典型实现代码:
interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("ConcreteComponent operation");
    }
}

class Decorator implements Component {
    private Component component;
    public Decorator(Component component) {
        this.component = component;
    }
    public void operation() {
        component.operation();
    }
}

class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component component) {
        super(component);
    }
    public void operation() {
        super.operation();
        System.out.println("ConcreteDecorator operation");
    }
}

上述代码中,Component接口定义了操作方法,ConcreteComponent是实际操作对象,Decorator和ConcreteDecorator则是装饰器对象。当需要给ConcreteComponent添加额外的功能时,可以通过创建对应的装饰器对象来实现。装饰器模式的常用场景包括IO流、Swing GUI框架等。

本文介绍了Java中的四种常用设计模式,即单例模式、工厂模式、观察者模式和装饰器模式,并且给出了它们的典型实现代码和使用场景说明。在实际的应用开发中,根据具体的业务需求,选择合适的设计模式可以提高代码的可维护性和开发效率。