• [一天一个设计模式]-[策略模式]


    策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

    策略模式和状态模式的区别:

    • 策略模式的每个策略是平等的,所有策略调用者都应该知道,由调用者自己判断选择运用哪个策略
    • 状态模式的每个状态存在转换关系,调用者不用知道所有的状态,状态的转变一般不由调用者主动设置状态

    策略模式的主要角色如下。

    • 抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
    • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
    • 环境(Context)类:持有一个策略类的引用,最终给客户端调用。

    举个栗子,打架的时候如果是防守策略那行为就是举盾,攻击策略就是挥剑

    
    interface Strategy{
        void move();
    }
    
    class Attack implements Strategy{
        
        @Override
        void move(){
            sout("ATTACK!")
        }
        
    }
    
    class Defense implements Strategy{
        
        @Override
        void move(){
            sout("defense!")
        }
    }
    
    class Fighter{
        Strategy strategy;
        
        public void setStrategy(){
            this.Strategy = strategy;
        }
        
        public void move(){
            strategy.move();
        }
        
    }
      
    
    
    main(){
        
        Fighter f=new Fighter();
        Strategy a= new AttackStrategy();
        Strategy d= new DefenseStrategy();
        
        f.setStrategy(a);
        f.move();
        
        f.setStrategy(d);
        f.move();
    }
    
  • 相关阅读:
    python中常见的部分错误
    不同类型指针自加所移动位置分析
    c语言,sizeof关键字,数组和指针区别
    数组名和指针能够等价的情况
    typedef与define宏定义用于声明新的类型之间的区别
    老问题了,函数返回指向常字符串的指针,形如 char *func()
    c语言运算符优先级 ., *, (), []
    const char**与char**类型的区别
    char *f[]与char (*f)[]的区别
    标准IO库函数sprintf
  • 原文地址:https://www.cnblogs.com/A-yes/p/12026927.html
Copyright © 2020-2023  润新知