java设计模式系列一之策略模式

一,概述
策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
一般由三部分组成:
1.抽象策略角色:一般是接口或者抽象类
2,具体策略角色:接口实现,包装具体算法实现
3,环境角色:持有策略引用
java SDK中比较典型的应用就是比较器Comparator,它就相当于策略接口。我们可以实现这个接口从而实现不同的比较器。而Collections就相当于Context,它持有这个引用,Collectios.sort(List list,Comparator<? super T> c)
二,UML类图
在这里插入图片描述
三,代码演示
策略接口

public interface Strategy {
    void execute();
}

具体策略实现类、

public class ConcreteStrategyA implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略A");
    }
}

public class ConcreteStrategyB implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略B");
    }
}

环境类,持有策略引用

public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void executeStrategy() {
        this.strategy.execute();
    }
}

测试

public class Test {
    public static void main(String[] args) {
        Context context = new Context(new ConcreteStrategyA());
        context.executeStrategy();
    }
}

结果

执行策略A
四,优缺点分析
优点:避免大量逻辑判断代码,符合类开闭原则。
缺点:会导致系统的类会越来越复杂。而且客户端必须自己知道所有的策略,然后决定用哪种算法。我们可以对策略模式进行优化。与工厂模式进行结合,将算法的选择交给工厂决定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值