欢迎访问宙启技术站
智能推送

Java函数中常见的设计模式

发布时间:2023-05-27 14:45:39

设计模式是一些常见的解决问题的方案,是程序员经过多年的实践总结出来的一些经验。在 Java 中,设计模式被广泛应用于函数的设计和开发中。本文将对 Java 函数中常见的设计模式进行介绍。

一、单例模式

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并且提供了全局访问点。在 Java 函数中,单例模式常用于创建 的对象,例如数据库连接池、线程池等。

举例:下面是一个线程池的单例实现:

public class ThreadPool {

   private static final ThreadPool INSTANCE = new ThreadPool();

   private ThreadPool() {}

   public static ThreadPool getInstance() {

      return INSTANCE;

   }

}

二、工厂模式

工厂模式是一种创建性设计模式,它将对象的创建隐藏在一个工厂类中,对调用者暴露一个接口来获取所需对象。在 Java 函数中,工厂模式通常用来生成不同类型的对象。

举例:下面是一个简单的工厂模式实现:

public interface Shape {

   void draw();

}

public class Rectangle implements Shape {

   @Override

   public void draw() {

      System.out.println("Inside Rectangle::draw() method.");

   }

}

public class Square implements Shape {

   @Override

   public void draw() {

      System.out.println("Inside Square::draw() method.");

   }

}

public class ShapeFactory {

   public Shape getShape(String shapeType){

      if(shapeType == null){

         return null;

      }        

      if(shapeType.equalsIgnoreCase("RECTANGLE")){

         return new Rectangle();

      } else if(shapeType.equalsIgnoreCase("SQUARE")){

         return new Square();

      } 

      return null;

   }

}

public class FactoryPatternDemo {

   public static void main(String[] args) {

      ShapeFactory shapeFactory = new ShapeFactory();

      //获取 Rectangle 对象,并调用其 draw 方法

      Shape shape1 = shapeFactory.getShape("RECTANGLE");

      //调用 Rectangle 的 draw 方法

      shape1.draw();

      //获取 Square 对象,并调用其 draw 方法

      Shape shape2 = shapeFactory.getShape("SQUARE");

      //调用 Square 的 draw 方法

      shape2.draw();

   }

}

三、观察者模式

观察者模式是一种行为型模式,它允许对象间建立一种一对多的关系,被观察对象的状态发生变化时,会通知所有观察者。在 Java 函数中,观察者模式通常用于事件监听,例如按钮点击事件、菜单选择事件等。

举例:下面是一个简单的观察者模式实现:

public interface Observer {

   void update(String message);

}

public class ConcreteObserver implements Observer {

   private String name;

   public ConcreteObserver(String name) {

      this.name = name;

   }

   @Override

   public void update(String message) {

      System.out.println(name + " receive message : " + message);

   }

}

public interface Subject {

   void addObserver(Observer observer);

   void removeObserver(Observer observer);

   void notifyObservers(String message);

}

public class ConcreteSubject implements Subject {

   private List<Observer> observers = new ArrayList<>();

   @Override

   public void addObserver(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);

      }

   }

}

public class ObserverPatternDemo {

   public static void main(String[] args) {

      Observer observer1 = new ConcreteObserver("Observer1");

      Observer observer2 = new ConcreteObserver("Observer2");

      Observer observer3 = new ConcreteObserver("Observer3");

      Subject subject = new ConcreteSubject();

      subject.addObserver(observer1);

      subject.addObserver(observer2);

      subject.addObserver(observer3);

      subject.notifyObservers("Hello World");

   }

}

四、装饰器模式

装饰器模式是一种结构型设计模式,它允许向一个对象添加功能而不改变对象的类。在 Java 函数中,装饰器模式常用于为已有类增加新的功能。

举例:下面是一个简单的装饰器模式实现:

public interface Component {

   void operation();

}

public class ConcreteComponent implements Component {

   @Override

   public void operation() {

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

   }

}

public class Decorator implements Component {

   private Component component;

   public Decorator(Component component) {

      this.component = component;

   }

   @Override

   public void operation() {

      component.operation();

   }

}

public class ConcreteDecoratorA extends Decorator {

   public ConcreteDecoratorA(Component component) {

      super(component);

   }

   private void addFunction() {

      System.out.println("ConcreteDecoratorA addFunction");

   }

   @Override

   public void operation() {

      super.operation();

      addFunction();

   }

}

public class ConcreteDecoratorB extends Decorator {

   public ConcreteDecoratorB(Component component) {

      super(component);

   }

   private void addFunction() {

      System.out.println("ConcreteDecoratorB addFunction");

   }

   @Override

   public void operation() {

      super.operation();

      addFunction();

   }

}

public class DecoratorPatternDemo {

   public static void main(String[] args) {

      Component component = new ConcreteComponent();

      component.operation();

      Component decoratorA = new ConcreteDecoratorA(component);

      decoratorA.operation();

      Component decoratorB = new ConcreteDecoratorB(decoratorA);

      decoratorB.operation();

   }

}

总结

本文介绍了 Java 函数中常见的单例模式、工厂模式、观察者模式和装饰器模式四种设计模式的应用和实现。这些设计模式已经被广泛应用于 Java 的设计和开发中,希望本文能对读者有所帮助。