21xrx.com
2025-03-27 12:48:26 Thursday
文章检索 我的文章 写文章
Java 设计模式期末考试题目
2023-06-15 17:49:12 深夜i     15     0
Java 设计模式

Java 设计模式是软件开发中非常重要的一部分,本文将为大家介绍一道 Java 设计模式期末考试题目,并对每个部分详细解答。考试题目如下:

1. 请列举至少 4 种常用的设计模式,并简要解释它们的应用场景和实现方式。

2. 请写一段代码实现单例模式,并对其进行测试。

3. 请写一段代码实现工厂模式,并对其进行测试。

4. 请写一段代码实现观察者模式,并对其进行测试。

对于第一部分的问题,常用的设计模式包括单例模式、工厂模式、观察者模式、命令模式、装饰模式、策略模式等。每个模式都有它适用的场景和实现方式,比如单例模式适用于需要全局唯一实例的场景,其实现方式可以使用私有构造函数和静态方法 getInstance() 等。

对于第二部分的问题,单例模式是最简单的设计模式之一,其实现方式有很多种,比如懒汉式、饿汉式、双重检验锁等。以下是一个懒汉式的单例模式实现代码:

public class Singleton{
  private static Singleton instance = null;
  private Singleton(){}
  public static synchronized Singleton getInstance(){
    if(instance == null){
      instance = new Singleton();
    }
    return instance;
  }
}

对于第三部分的问题,工厂模式适用于需要根据情况创建对象的场景,其实现方式一般有简单工厂、工厂方法和抽象工厂等。以下是一个简单工厂模式的实现代码:

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();
Shape shape1 = shapeFactory.getShape("RECTANGLE");
shape1.draw();
Shape shape2 = shapeFactory.getShape("SQUARE");
shape2.draw();
}
}

对于第四部分的问题,观察者模式适用于需要观察某些实体对象状态变化的场景,其实现方式包括 JDK 自带的 Observable 类和 Observer 接口,以及自己实现 Subject 和 Observer 接口等。以下是一个自己实现的观察者模式代码:

public interface Subject {
  public void register(Observer o);
  public void unregister(Observer o);
  public void notifyObservers();
}
public interface Observer {
  public void update(Integer state);
}
public class ConcreteSubject implements Subject {
  private List
  observers;
 
  private Integer state;
  public ConcreteSubject() {
    observers = new ArrayList<>();
  }
  public Integer getState()
    return state;
  
  public void setState(Integer state) {
    this.state = state;
    notifyObservers();
  }
  public void register(Observer o) {
    observers.add(o);
  }
  public void unregister(Observer o) {
    observers.remove(o);
  }
  public void notifyObservers() {
    for (Observer o : observers) {
      o.update(state);
    }
  }
}
public class ConcreteObserver1 implements Observer {
  public void update(Integer state) {
    System.out.println("ConcreteObserver1: " + state);
  }
}
public class ConcreteObserver2 implements Observer {
  public void update(Integer state) {
    System.out.println("ConcreteObserver2: " + state);
  }
}
public class ObserverPatternDemo {
  public static void main(String[] args) {
    ConcreteSubject subject = new ConcreteSubject();
    Observer observer1 = new ConcreteObserver1();
    Observer observer2 = new ConcreteObserver2();
    subject.register(observer1);
    subject.register(observer2);
    subject.setState(1);
    subject.unregister(observer1);
    subject.setState(2);
  }
}

、期末考试、单例模式、工厂模式、观察者模式。

  
  

评论区