zoukankan      html  css  js  c++  java
  • 策略模式

    我觉得策略模式就像公司的饮水机

    出水口只有一个,当你按热水时出热水,当你按冷水时出冷水,虽然出水口都是一个,但是你点击了不同的策略,就得到了不同的结果.

    如何实现:

    一个接口,多个实现类(就是策略类),一个调用者

     接口:

    public interface getWater {
    void getWater();
    }
    ----------------策略类----------------
    public class GetCoolWater implements GetWater {
    @Override
    public void getWater() {
    System.out.println("取凉水");
    }
    }

    public class GetHotWater implements GetWater {
    @Override
    public void getWater() {
    System.out.println("取热水");
    }
    }
    ---------------调用类-------------------
    public class RealGetWater {
    public GetWater getWater;
    public RealGetWater(GetWater getWater){
    this.getWater = getWater;
    }
    public void realGetWater(){
    getWater.getWater();
    }
    ------------------测试-----------------
    public class Test0 {
    private static int CHOOSE_CODE = 0 ;
    public static void main(String[] args) {
    GetCoolWater getCoolWater = new GetCoolWater();
    GetHotWater getHotWater = new GetHotWater();

    RealGetWater realGetWater = new RealGetWater(CHOOSE_CODE == 1 ? getHotWater : getCoolWater);
    realGetWater.getWater.getWater();
    }
    }
    =======================================
    结果表明:当choose_code为0时打印冷水,当choose_code为1时打印热水.
    真正实现了通过选择不同的简单策略,获取不同的复杂结果!
    这,就是策略模式.

    在SpringApplication启动过程中,有一个方法createApplicationContext()也使用了策略模式,如下:
    protected ConfigurableApplicationContext createApplicationContext() {
    Class<?> contextClass = this.applicationContextClass;
    if (contextClass == null) {
    try {
    contextClass = Class.forName(this.webEnvironment
    ? DEFAULT_WEB_CONTEXT_CLASS : DEFAULT_CONTEXT_CLASS);
    }
    catch (ClassNotFoundException ex) {
    throw new IllegalStateException(
    "Unable create a default ApplicationContext, "
    + "please specify an ApplicationContextClass",
    ex);
    }
    }
    return (ConfigurableApplicationContext) BeanUtils.instantiate(contextClass);
    }

    通过传入不同的contextClass对象(策略),可以创建完全不同的ApplicationContext对象(结果).



  • 相关阅读:
    3、SpringBoot执行原理
    10、@Controller跟@RestController注解的使用
    2、Spring项目的创建【官网跟IDEA】
    1、了解SpringBoot
    PHP算法之IP 地址无效化
    PHP算法之宝石与石头
    MYSQL查询查找重复的电子邮箱
    PHP算法之猜数字
    PHP算法之盛最多水的容器
    PHP算法之回文数
  • 原文地址:https://www.cnblogs.com/wangxuejian/p/10597312.html
Copyright © 2011-2022 走看看