策略模式和工厂模式的区别_Java设计模式,策略模式

6a7189b8b9db2f021db1216d678fa75f.png

定义

策略模式是设计模式之中相对比较简单的一种模式,其解决的就是大量使用 if...else...、switch...case... 这样的结构导致的代码臃肿的问题。

来看看策略模式的定义:

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户端而独立变化。

实现

首先定义一个基类,用于表示策略的接口:

public interface Operator {
    void operate();
}

下面是两个具体的实现类,也就是具体的策略:

public class Operator1 implements Operator {

    @Override
    public void operate() {
        System.out.println("operate 1...");
    }
}
public class Operator2 implements Operator {
    @Override
    public void operate() {
        System.out.println("operate 2...");
    }
}

策略模式一般与工厂方法模式结合使用,来达到最佳效果:

public final class OperatorFactory {

    public static Operator operator(int code) {
        switch (code) {
            case 0:
                return new Operator1();

            default:
                return new Operator2();
        }
    }
}

如果在客户端中使用 switch...case... 结构把所有的实现策略都写在同一个方法中,势必引起代码冗余:

public class Client {

    public static void main(String[] args) {
        switch (Integer.valueOf(args[0])) {
            case 0:
                // operate...
                break;

            case 1:
                // operate...
                break;

            case 2:
                // operate...
                break;

            default:
                // operate...
                break;
        }
    }
}

如果结合策略模式和工厂方法模式,使用下面的代码,就会使得代码更加清晰,符合单一职责原则,同时,客户端不用关心具体的策略的执行细节,只需关心自己需要传入的值即可。

public class Client {

    public static void main(String[] args) {
        OperatorFactory.operator(Integer.valueOf(args[0])).operate();
    }
}

总结

策略模式主要用来分离算法,根据相同的行为抽象来做不同的具体策略实现。通过以上也可以看出策略模式的优缺点:

优点:

  • 结构清晰明了、使用简单直观。
  • 耦合度相对而言较低,扩展方便。
  • 操作封装也更为彻底,数据更为安全。

缺点:

  • 随着策略的增加,子类也会变得繁多。

本文由 知我者乎 原创,未经许可,不得转载!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值