21xrx.com
2024-11-05 18:28:20 Tuesday
登录
文章检索 我的文章 写文章
Java 设计模式期末考试题目
2023-06-15 17:49:12 深夜i     --     --
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);

  }

}

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

  
  

评论区

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