21xrx.com
2024-09-20 05:52:04 Friday
登录
文章检索 我的文章 写文章
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;

  }

}

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

  
  

评论区

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