查看原文
其他

漫画:星球入侵之策略模式

The following article is from JAVA小咖秀 Author 小小小咖

比基盗星球还有2万公里将要到达我星球入侵。。。


此时的why星球




public class SimpleHero {

    public void fight (String condition) {
        if (condition == null ) {
            return;
        }
        if ("AgainstTheWind".equals(condition)) {
            System.out.println("逆风翻盘策略");

        } else if ("DownwindSuppression".equals(condition)) {
            System.out.println("顺风压制策略");

        } else if ("BalanceInPower".equals(condition)) {
            System.out.println("势均力敌策略");

        }
    }

    public static void main(String[] args) {
        SimpleHero simpleHero = new SimpleHero();
        simpleHero.fight("AgainstTheWind");
    }
}




策略模式:定义一些算法族,分别封装,让他们可以相互替换,此模式让算法的变化独立于使用算法的客户。该设计模式属于行为型模式。


策略模式UML图:


public interface Strategy {

    public void fight();
}

public class AgainstTheWindStrategy implements Strategy {

    @Override
    public void fight() {
        System.out.println("逆风翻盘策略");
    }
}


public class BalanceInPowerStrategy implements Strategy {

    @Override
    public void fight() {
        System.out.println("势均力敌策略");
    }
}


public class DownwindSuppressionStrategy implements Strategy {

    @Override
    public void fight() {
        System.out.println("顺风压制策略");
    }
}


public class Hero {

    private Strategy strategy;

    public Hero(Strategy strategy) {
        this.strategy = strategy;
    }

    public void useStrategem() {
        strategy.fight();
    }

}


public class Battlegroud {

    public static void main(String[] args) {
        Hero hero = new Hero(new AgainstTheWindStrategy());
        hero.useStrategem();

        Hero hero1 = new Hero(new BalanceInPowerStrategy());
        hero1.useStrategem();

        Hero hero2 = new Hero(new DownwindSuppressionStrategy());
        hero2.useStrategem();

    }
}


tips :

策略模式优点:满足开闭原则,当新增策略时,只需要新增策略实现类,方便扩展,避免大量的if..else。

策略模式缺点:客户端需要知道所有的策略实现类,如果策略比较多的时候,类的数量也会比较多。

推荐阅读


卧槽!原来 IOC 这么简单

分布式ID生成服务,真的有必要搞一个

个人珍藏的80道多线程并发面试题(1-10答案解析)
图解什么是一致性哈希算法
Nginx 从入门到实践,万字详解!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存