美文网首页
设计模式(二)策略模式

设计模式(二)策略模式

作者: Active_Loser | 来源:发表于2019-03-10 21:17 被阅读0次

    总章目录,设计模式(一)基本介绍

    一、定义

    策略模式:策略模式定义了算法族,分别封装起来,让他们之间可以互相转换,此模式算法的变化独立于使用算法的客户,但是策略模式造成很多的策略类。
    策略模式主要包含以下角色。
    Contex: 环境类,持有一个策略类的引用,最终给客户端调用。
    Strategy: 抽象策略(Strategy)类:定义公共接口,使用接口或抽象类实现。
    ConcreteStrategy: 实现了抽象策略定义的接口

    二、使用场景

    策略模式使我们的程序更易于维护和扩展。因此,当我们通常需要在这些场景中选择策略模式:
    1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
    2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
    3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

    三、简单案列

    我们知道猴子有七十二变,通过变身可以有各种变化,猴子本身就是一个Context,它有一个变身的技能,可以变声也可以恢复真身。
    Contex:

    public class Monkey {
    
        Morph morph;
    
        public Monkey(Morph morph) {
            this.morph = morph;
        }
    
        public void show(){
            morph.change();
        }
    
        public void setMorph(Morph morph) {
            this.morph = morph;
        }
    }
    

    Strategy:

    public interface Morph {
        void change();
    }
    

    ConcreteStrategy:

    public class NoMorph implements Morph {
    
        @Override
        public void change() {
            System.out.println("真身");
        }
    }
    
    public class DragonMorph implements Morph {
        @Override
        public void change() {
            System.out.println("变身为龙");
        }
    }
    

    测试使用

    public class StrategyTest {
    
        @Test
        public void MonkeyTst(){
            Monkey monkey=new Monkey(new NoMorph());
            monkey.show();
    
            monkey.setMorph(new DragonMorph());
            monkey.show();
        }
    }
    
    打印:
    真身
    变身为龙
    

    相关文章

      网友评论

          本文标题:设计模式(二)策略模式

          本文链接:https://www.haomeiwen.com/subject/cdlypqtx.html