java设计模式:(策略模式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wanghang88/article/details/82057310

1:策略模式的描述

   把它们一个个封装起来,并且使他们可以相互替换。这样策略模式就可以独立使用它们的客户端变化。

   策略模式其实是为了解决,同一个问题有多个不能的解决方式,也就是说提供了多种不同的解决策略,比如,我们对一个数组  进行排序。那么这里就有冒泡排序、快速排序、归并排序等等不同的算法,这里我们就可以说这些是不同的策略。

2:策略模式的具体实现:

  2.1)公共接口(比如提供一个格式化时间的方法):

   

public interface FormatTime {
 
    public String format(long millis);
}

      2.2)接口的实现:

     

public class FormatWithChinese implements FormatTime {
 
    @Override
    public String format(long millis) {
        int s = (int) (millis / 1000);
 
        int h = s / (60 * 60);
        s = s % (60 * 60);
 
        int m = s / 60;
        s = s % 60;
 
        return StringUtils.formatIntegerString(h, "#00") + "时"
                + StringUtils.formatIntegerString(m, "#00") + "分"
                + StringUtils.formatIntegerString(s, "#00") + "秒";
    }
}

2.3)定义具体的策略:

   


public class StrategyContains {
 
    private FormatTime formatTime;                 //接口
    
    public StrategyContains(FormatTime _formatTime) {
        this.formatTime = _formatTime;
    }
    
    public String format(long millis) {
        return formatTime.format(millis);          //接口的方法
    }
}

2.4)测试:


public class FormatTimeClient {
 
    public static void main(String[] args) {
        StrategyContains strategy = new StrategyContains(new FormatWithChinese ());
        System.out.println(strategy.format(155796986));
    }
}

3:策略模式的分析:

     抽象策略(Strategy)角色:是抽象类或接口来承担,它给出具体策略角色需要实现的接口;

     具体策略(ConcreteStrategy)角色:实现封装了具体的算法或行为;

    场景(Context)角色:持有抽象策略类的引用。

   

猜你喜欢

转载自blog.csdn.net/wanghang88/article/details/82057310