美文网首页
策略模式 ~ 设计模式之一

策略模式 ~ 设计模式之一

作者: 喏喏2021 | 来源:发表于2021-12-25 21:06 被阅读0次

    为啥先说策略模式呢,当然是听着策略这个词比较厉害了,开玩笑,其实是它比较简单,好理解!

    1. 定义

    策略(Strategy)模式,定义一系列算法,并将每个算法封装起来,使它们可以被统一使用,且算法的改变不影响具体使用方。

    2. 优点

    1)可以避免多重条件语句,如if...else语句,switch...case语句等
    2)算法可重用,避免重复的代码实现,也可以把算法族转移到公共父类中
    3)可以提供相同行为的不同实现,使用方可以根据自己的需求自由选择
    4)提供了对开闭原则的完美支持,可以不修改原代码的情况下,灵活添加新算法

    3. 缺点

    1)使用方需要了解每个策略算法的含义和区别,以便选择最合适的
    2)策略模式可能会造成有很多的策略类,增加了维护的难度

    4. 结构

    • 抽象策略类:定义的一个公共接口,供各个算法实现这个接口
    • 具体策略类:实现抽象策略类定义接口,提供具体的算法实现
    • 环境类:对一个策略类的引用

    5. 实现

    我们做一道菜呢,可能会有很多种做法,比如煎、蒸、煮等
    今天妈妈做什么样的菜呢,是煎呢,还是煮呢,当然了,妈妈很都会做,大家喜欢什么,报菜名就可以了,
    妈妈可掌握了各种做法,来者不拒,厉害呢!
    我们看看具体的做法策略实现:

    //抽象策略类 
    interface CookStrategy {
        public void cook();
    }
    
    //煎的策略做法
    class FriedCookStrategy implements CookStrategy {
        @Override
        public void cook() {
            System.out.println("煎的烹饪做法");
        }
    }
    
    //蒸的策略做法
    class SteamedCookStrategy implements CookStrategy {
        @Override
        public void cook() {
            System.out.println("蒸的烹饪做法");
        }
    }
    
    //环境使用类,厨师
    class Shef {
        private CookStrategy cookStrategy;
    
        public CookStrategy getCookStrategy() {
            return cookStrategy;
        }
    
        public void setCookStrategy(CookStrategy cookStrategy) {
            this.cookStrategy = cookStrategy;
        }
        
        public void cook(){
            cookStrategy.cook();
        }
    }
    
    public class StrategyTest {
        public static void main(String[] args) {
            //厨师,我要开始做饭了
            Shef shef = new Shef();
            
            //小明说,我喜欢吃油煎的,香!
            CookStrategy cookStrategy = new FriedCookStrategy();
            shef.setCookStrategy(cookStrategy);
            shef.cook();
            
            //小红说,我喜欢蒸的,健康也很美味!
            cookStrategy = new SteamedCookStrategy();
            shef.setCookStrategy(cookStrategy);
            shef.cook();
        }
    }
    //煎的烹饪做法
    //蒸的烹饪做法
    

    相关文章

      网友评论

          本文标题:策略模式 ~ 设计模式之一

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