zoukankan      html  css  js  c++  java
  • 公用技术——设计模式14——行为型模式——策略模式

    1、概念

    为了实现相同的目标,提出了不同的解决方案,策略模式的目的是用户可以动态的在这些解决方案中来回切换。

    也可以表述为:

    为了实现相同的功能,提出了不同的算法,策略模式的目的是用户可以动态的在这些算法中来回切换。

    具体到代码,接口用户封装功能,不同的接口实现类提供不同的算法。

    策略模式的实现方式是IOC,依赖注入,接口定义在编译阶段,在运行阶段决定注入哪种实现类,以提供其对应的算法实现。

    2、UML图

    3、代码

      Client

    /**
     * 
     * @File Name: Client.java
     * @Description: 用户类,他想解决某种问题
     * @version 1.0
     * @since JDK 1.8
     */
    public class Client {
    	// 依赖注入,构造器,属性,方法参数都可以
    	private IPlan plan;
    
    	// 解决某种问题,Iplan接口的实现类提供解决方案
    	public void solveProblem(IPlan plan) {
    		this.plan = plan;
    		plan.provideSolution();
    	}
    }

      IPlan接口类,它封装解决方案的功能。

    /**
     * 
     * @File Name: IPlan.java
     * @Description: 计划接口类,它用于封装解决方案
     * @version 1.0
     * @since JDK 1.8
     */
    public interface IPlan {
    
    	void provideSolution();
    }

      PlanA接口实现类,PlanB与PlanC类与之类似,此处省略

    /**
     * 
     * @File Name: PlanA.java 
     * @Description: 接口实现类,提供A解决方案
     * @version 1.0
     * @since JDK 1.8
     */
    public class PlanA implements IPlan {
    
    	@Override
    	public void provideSolution() {
    		System.out.println("执行A计划");
    	}
    }

    4、讨论

     

    问题1:注入功能接口(此例中为IPlan)的方式?

     

    答:大部分项目普遍都采用Spring框架,spring框架的注入方式有三种,构造器,属性,工厂方法参数。其中自动注入依赖的方式居多,采用属性的方式居多,例如此例中

     

    • IPlan接口作为Client的属性,并在属性上添加@Autowire注解。
    • PlanA,PlanB,PlanC类上添加@Service注解。
    • 由于自动注入方式是根据byName方式查找依赖的,所以属性的名称必须是planA,planB或planC,否则根据byType方式查找会报错。

     

    5、示例

     集合的排序功能,参数为Comparator接口。

  • 相关阅读:
    org.apache.catalina.mbeans.ServerLifecycleListener
    模拟log4j获取日志对象调用所在的类名、方法名及行号
    菜鸟从零学编程(八)——将MyEclipse项目导入到Eclipse
    Oracle DB 使用调度程序自动执行任务
    无线网卡的查看与配置——iw,iwconfig,ethtool
    如何从iTunes Connect中提款呢?
    tomcat解压war包的一点例外
    Shared File System Master Slave 全配置以及测试
    [置顶] “欢子说事”微信公众平台上线,做大学生第一交流平台
    android编程之ExpandableListView使用总结
  • 原文地址:https://www.cnblogs.com/rain144576/p/9940882.html
Copyright © 2011-2022 走看看