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

策略模式 ~ 设计模式之一

作者: 喏喏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