Java-策略模式

Java-策略模式

 今天给大家介绍第三个设计模式:策略模式

一.策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用

UML示意图



 

二.组成部分:

1. 环境角色:持有一个策略类引用

2. 抽象策略

3. 具体策略:相关的算法或操作

三.代码例子

1. 抽象策略

package com.eekq.strategy;

 

public interface IStrategy {

 

    /**策略方法*/

    public abstract double add();

}

2. 具体策略,这里我以两个具体策略为例

package com.eekq.strategy;

 

public class ConcreteStrategy1 implements IStrategy {

 

    /**示意性算法*/

    public double add() {

        // TODO 自动生成方法存根

        System.out.println(this.getClass().getName() + "的加法运算");

        return 0;

    }

 

}

package com.eekq.strategy;

 

public class ConcreteStrategy2 implements IStrategy {

 

    public double add() {

        // TODO 自动生成方法存根

        System.out.println(this.getClass().getName() + "的加法运算");

        return 0;

    }

 

}

3.环境角色

package com.eekq.strategy;

 

public class Context {

    /**环境角色类*/

    private IStrategy strategy;

 

    public Context(IStrategy strategy) {

        this.strategy = strategy;

    }

 

    /**策略方法*/

    public double add() {

        this.strategy.add();

        return 0;

    }

}

4.客户端调用

package com.eekq.strategy;

 

public class Main {

 

    /**

     *@paramargs

     */

    public static void main(String[] args) {

        // TODO 自动生成方法存根

        Context context = new Context(new ConcreteStrategy1());

        context.add();//执行算法1

        context = new Context(new ConcreteStrategy2());

        context.add();//执行算法2

    }

 

}

5.执行结果:

com.eekq.strategy.ConcreteStrategy1的加法运算

com.eekq.strategy.ConcreteStrategy2的加法运算

6.总结

优点:动态改变算法或行为

缺点:客户端必须知道所有的策略类,并自行决定使用哪一个策略类,必须对每一个算法了解

 

<!--EndFragment-->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值