21xrx.com
2025-03-23 21:34:21 Sunday
文章检索 我的文章 写文章
Java设计模式刘伟模拟试题答案解析
2023-06-16 09:44:27 深夜i     --     --
单例模式 线程安全 懒汉式

Java设计模式是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;
  }
}

二、工厂模式

题目:实现一个工厂模式,可以生产不同类型的交通工具。

答案:工厂模式是一种用来创建对象的设计模式,它将对象的创建过程抽象出来,让客户端代码只关心对象的使用,而不需要关心对象的创建。在Java中,有多种实现工厂模式的方法,如简单工厂、工厂方法、抽象工厂等。

以下是一个工厂方法模式的实现,可以生产不同类型的交通工具:

public interface Transport {
  void run();
}
public class Car implements Transport {
  @Override
  public void run() {
    System.out.println("汽车行驶");
  }
}
public class Bike implements Transport {
  @Override
  public void run() {
    System.out.println("自行车行驶");
  }
}
public interface TransportFactory {
  Transport createTransport();
}
public class CarFactory implements TransportFactory {
  @Override
  public Transport createTransport() {
    return new Car();
  }
}
public class BikeFactory implements TransportFactory {
  @Override
  public Transport createTransport() {
    return new Bike();
  }
}

关键词:工厂模式、工厂方法、交通工具

三、代理模式

题目:实现一个静态代理模式,代理一个查询用户的方法。

答案:代理模式是一种用来控制访问某个对象的设计模式,它在访问对象时引入了一定程度的间接性,可以让代理对象控制对原始对象的访问。在Java中,有多种实现代理模式的方法,如静态代理、动态代理等。

以下是一个静态代理模式的实现,代理一个查询用户的方法:

public interface UserService {
  void getUserInfo();
}
public class UserServiceImpl implements UserService {
  @Override
  public void getUserInfo() {
    System.out.println("查询用户信息");
  }
}
public class UserServiceProxy implements UserService {
  private UserService userService;
  public UserServiceProxy(UserService userService)
    this.userService = userService;
  
  @Override
  public void getUserInfo() {
    System.out.println("开始代理");
    userService.getUserInfo();
    System.out.println("代理结束");
  }
}

关键词:代理模式、静态代理、查询用户

四、策略模式

题目:实现一个策略模式,可以根据不同的支付方式进行支付。

答案:策略模式是一种用来定义一系列算法的设计模式,它将每个算法封装成一个独立的类,让它们可以相互替换。在Java中,可以使用接口实现策略模式。

以下是一个策略模式的实现,可以根据不同的支付方式进行支付:

public interface PayStrategy {
  void pay(int amount);
}
public class AliPayStrategy implements PayStrategy {
  @Override
  public void pay(int amount) {
    System.out.println("支付宝支付" + amount + "元");
  }
}
public class WeChatPayStrategy implements PayStrategy {
  @Override
  public void pay(int amount) {
    System.out.println("微信支付" + amount + "元");
  }
}
public class PayContext {
  private PayStrategy payStrategy;
  public PayContext(PayStrategy payStrategy)
    this.payStrategy = payStrategy;
  
  public void pay(int amount) {
    payStrategy.pay(amount);
  }
}

关键词:策略模式、支付方式、支付金额

五、模板方法模式

题目:实现一个模板方法模式,用于在控制台中输出一个菜单。

答案:模板方法模式是一种用来定义一个算法框架的设计模式,它使用抽象类或接口定义算法的框架,而将具体实现交给子类实现。在Java中,模板方法模式常常使用抽象类实现。

以下是一个模板方法模式的实现,用于在控制台中输出一个菜单:

public abstract class Menu {
  public void printMenu() {
    System.out.println("===============================");
    System.out.println("     " + getTitle() + "    ");
    System.out.println("===============================");
    for (String item : getItems()) {
      System.out.println("- " + item);
    }
    System.out.println("===============================");
  }
  protected abstract String getTitle();
  protected abstract List
  getItems();
 
}
public class CoffeeMenu extends Menu {
  @Override
  protected String getTitle()
    return "咖啡菜单";
  
  @Override
  protected List
  getItems() {
 
    List
  items = new ArrayList<>();
 
    items.add("美式咖啡");
    items.add("拿铁咖啡");
    items.add("卡布奇诺咖啡");
    return items;
  }
}

关键词:模板方法模式、菜单输出、子类实现

  
  

评论区