其他分享
首页 > 其他分享> > 策略模式

策略模式

作者:互联网

一、策略模式的介绍

1、定义

        策略模式定义一组算法,将每个算法都封装起来,并且使它们之间可以互相转换。也就是说,针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,使得算法可以在不影响到客户端的情况下发生变化。

        策略模式涉及到的三个角色:

        策略模式的类图如下:

2、使用场景

3、优缺点

(1)优点

(2)缺点

二、策略模式的实现

        场景描述:刘备去东吴,诸葛亮给赵云的三个锦囊妙计帮助刘备脱险。类图如下:

代码实现:

/**
 * 抽象策略角色:锦囊
 */
public interface SilkBag {
    /**
     * 策略方法
     */
    void programme();
}
/**
 * 具体策略角色:锦囊A
 */
public class SilkBagA implements SilkBag{
    @Override
    public void programme() {
        System.out.println("见乔国老,把主公娶亲的事情搞得东吴人尽皆知");
    }
}
/**
 * 具体策略角色:锦囊B
 */
public class SilkBagB implements SilkBag{
    @Override
    public void programme() {
        System.out.println("用谎言(曹操打荆州)骗泡在温柔乡里的主公回去");
    }
}
/**
 * 具体策略角色:锦囊C
 */
public class SilkBagC implements SilkBag{
    @Override
    public void programme() {
        System.out.println("让孙夫人摆平东吴的追兵,她是孙权妹妹,东吴将领惧她三分");
    }
}
/**
 * 环境角色
 */
public class Danger {
    private SilkBag silkBag;

    public void setSilkBag(SilkBag silkBag) {
        this.silkBag = silkBag;
    }

    /**
     * 危机的应对方案
     */
    public void plan(){
        silkBag.programme();
    }
}
public class StrategyDemo {
    public static void main(String[] args) {
        Danger danger = new Danger();
        System.out.println("危机一应对方案:");
        danger.setSilkBag(new SilkBagA());
        danger.plan();
        System.out.println("危机二应对方案:");
        danger.setSilkBag(new SilkBagB());
        danger.plan();
        System.out.println("危机三应对方案:");
        danger.setSilkBag(new SilkBagC());
        danger.plan();
    }
}

 

标签:策略,角色,danger,void,模式,算法,public
来源: https://blog.csdn.net/weixin_47382783/article/details/110291393