资讯专栏INFORMATION COLUMN

策略模式(Strategy)

luodongseu / 3293人阅读

摘要:一般实现创建执行方法测试类问题在执行方法中添加或修改方法时,需要修改执行类的源代码,及客户端调用的方法。策略模式需要创建一个容器类,一个策略接口,多个策略类及一个测试类。缺点客户端需要知道所有的策略类,从而决定具体调用会产生大量策略类。

一般实现

创建执行方法

    public static void main(String[] args) {
        ExcuMenthod em = new ExcuMenthod();
        em.method1();
        em.method2();
        em.method3();
    }

测试类

    public static void main(String[] args) {
        ExcuMenthod em = new ExcuMenthod();
        em.method1();
        em.method2();
        em.method3();
    }

问题
在执行方法中添加或修改方法时,需要修改执行类的源代码,及客户端调用的方法。

策略模式

需要创建
一个容器类(Context),一个策略接口(IStrategy),多个策略类(Strategy implement IStrategy)及一个测试类。

代码实现

容器类:通过构造方法注入IStrategy接口的实现类,然后调用接口的执行方法;

    public class Context {
    
        private IStrategy strategy;
    
        public Context(IStrategy strategy){
            this.strategy = strategy;
        }
    
        public void operator (){
            strategy.operator();
        }
    }
策略接口:定义策略的执行方法;
    public interface IStrategy {
    
        void operator();
    
    }
策略接口:实现策略接口,拥有具体的执行方法;
    public class Strategy1 implements IStrategy{
        
        @Override
        public void operator() {
            System.out.println("FIRST OPERATOR ...");
        }
    }
    public class Strategy2 implements IStrategy{
        
        @Override
        public void operator() {
            System.out.println("SECOND OPERATOR ...");
        }
    }
    public class Strategy3 implements IStrategy{
        
        @Override
        public void operator() {
            System.out.println("THIRD OPERATOR ...");
        }
    }

具体实现

在测试方法中实例化一个容器,通过构造方法利用多态的性质传入具体的实现类,调用容器的执行方法,即实现具体策略类的执行方法。

     public static void main(String[] args) {
        Context context = new Context(new Strategy1());
        context.operator();

        context = new Context(new Strategy2());
        context.operator();

        context = new Context(new Strategy3());
        context.operator();
    }
输出:
    FIRST OPERATOR ...
    SECOND OPERATOR ...
    THIRD OPERATOR ...

优点

动态改变对象的行为。

缺点
客户端需要知道所有的策略类,从而决定具体调用;会产生大量策略类。

源码

https://github.com/Seasons20/DisignPattern.git
   

END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69229.html

相关文章

  • 设计模式-策略模式

    摘要:在这个算法类中封装了大量查找算法,该类代码将较复杂,维护较为困难。换言之,策略模式只适用于客户端知道算法或行为的情况。策略模式概览图参考菜鸟教程策略模式十种常用的设计模式大部分自己总结,部分摘抄与模式之策略模式 策略模式 ​ 我们都知道商场打折的时候,会根据会员的等级情况进行不同的折扣优惠,如果是VIP会员,那么可能就是5折优惠,如果是一般会员就是8折优惠,如果是普通顾客就是9折...

    Freelander 评论0 收藏0
  • 如何避免if else

    摘要:在开发的过程中相信你也会写很多的语句吧,此篇主要来讲讲如何在日常开发的过程中尽量少的使用语句。策略一单例模式这种单例模式在类一加载的时候就将单例对象创建完毕,总是这个对象存在内存中,避免了通过线程同步来生成对象,线程安全的创建方式。 在开发的过程中相信你也会写很多的if else语句吧,此篇主要来讲讲如何在日常开发的过程中尽量少的使用if else语句。 0x01 为什么要去if el...

    YancyYe 评论0 收藏0
  • Java重构-策略模式、状态模式、卫语句

    摘要:前言当代码中出现多重语句或者语句时。代替多重分支这个情况的代替方式是可以为晴天时处理逻辑下雨时处理逻辑阴天时处理逻辑策略模式使用策略模式可以代替多重和语句,让代码维护变得更加简单。状态模式允许一个对象在其内部状态改变的时候改变其行为。 前言 当代码中出现多重if-else语句或者switch语句时。弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-els...

    Sourcelink 评论0 收藏0
  • 慕课网_《模式的秘密之策略模式》学习总结

    时间:2017年08月31日星期四说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:https://github.com/zccodere/s...学习源码:https://github.com/zccodere/s... 第一章:策略模式简介 1-1 简介 课程大纲 什么是策略模式 策略模式如何实现 策略模式总结篇 实例案例分享 日常生活中的策略 Wor...

    zhongmeizhi 评论0 收藏0
  • 设计模式-策略模式

    摘要:今天我们来学习一种行为型模式,策略模式。策略模式让算法独立于使用它的客户而变化,也称为政策模式。策略模式提供了可以替换继承关系的办法。使用策略模式可以避免使用多重条件转移语句。策略模式将造成产生很多策略类。今天我们来学习一种行为型模式,策略模式(Strategy Pattern)。模式定义定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<