java常用设计模式之策略模式

 

java中常用的设计模式如单例模式、原型模式,在这之前的2篇文章中已经说明,还有代理模式,外观模式、装饰模式、模板模式等。

今天再说一个java中常用的设计模式-策略模式。

说的有出入的,请大家指正,互相学习,共同进步!

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。

下面来看代码吧。

步骤 1

创建一个接口。

Strategy.java

public interface Strategy {

    void operate(int a , int b) ;

}

 

步骤 2

创建实现接口的实体类。

public class AddStrategy implements Strategy {

    @Override

    public void operate(int a, int b) {

        System.out.println(“a+b=”+(a+b));

    }

}
public class SubStrategy implements Strategy{

    @Override

    public void operate(int a, int b) {

        System.out.println(“a-b=”+(a-b));

    }

}
public class MulStrategy implements Strategy {

    @Override

    public void operate(int a, int b) {

        System.out.println(“a*b=”+(a*b));

    }

}
public class DivStrategy implements Strategy {

    @Override

    public void operate(int a, int b) {

        System.out.println(“a/b=”+(a/b));

    }

}

 

步骤 3

使用 Context 来查看当它改变策略 Strategy 时的行为变化。

public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {

        this.strategy = strategy;

    }

    public int executeStrategy(int num1, int num2) {

        return strategy.operate(num1, num2);

    }

}

 

步骤 4

验证输出。

public class Test {

    public static void main(String[] args) {

        Context context = new Context(new AddStrategy());

        System.out.println(“10 + 5 = ” + context.executeStrategy(10, 5));

        context = new Context(new SubStrategy());

        System.out.println(“10 – 5 = ” + context.executeStrategy(10, 5));

        context = new Context(new MulStrategy());

        System.out.println(“10 * 5 = ” + context.executeStrategy(10, 5));

        context = new Context(new DivStrategy());

        System.out.println(“10 / 5 = ” + context.executeStrategy(10, 5));

    }

}

ok,到此结束,大家可以自行运行测试。

 

策略模式优缺点及使用场景

优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。

缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。

使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。

Java中Comparator接口,就用的策略模式。如Collections里面有一个sort方法,可自行实现Comparator接口对集合排序。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值