美文网首页设计模式
设计模式-策略模式

设计模式-策略模式

作者: Archer_J | 来源:发表于2022-01-17 15:37 被阅读0次
/**
 * 策略模式
 * 策略模式是封装算法的变化
 * 策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
 *
 * 优点
 * 1.多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如 if...else 语句、switch...case 语句。
 * 2.策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。
 * 3.策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的实现。
 * 4.策略模式提供了对开闭原则的完美支持,可以在不修改原代码的情况下,灵活增加新算法。
 * 5.策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离。
 *
 * 缺点
 * 1.客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。
 * 2.策略模式造成很多的策略类,增加维护难度。
 */
public class StrategyTest {

    public static void main(String[] args) {
        Cache cache = new Cache();
        cache.setStrategy(new DiskStrategy());
        cache.setCache("cache");
        cache.getCache();

        cache.setStrategy(new MemoryStrategy());
        cache.setCache("cache");
        cache.getCache();
    }
}
/**
 * 缓存(环境类)
 */
public class Cache implements Strategy {

    private Strategy strategy;

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    @Override
    public void setCache(String cache) {
        strategy.setCache(cache);
    }

    @Override
    public String getCache() {
        return strategy.getCache();
    }
}
/**
 * 策略接口
 */
public interface Strategy {

    /**
     * 设置缓存
     */
    void setCache(String cache);

    /**
     * 获取缓存
     */
    String getCache();
}
/**
 * 磁盘缓存
 */
public class DiskStrategy implements Strategy {

    @Override
    public void setCache(String cache) {
        System.out.println("缓存到磁盘");
    }

    @Override
    public String getCache() {
        return "从磁盘获取到缓存";
    }
}
/**
 * 内存缓存
 */
public class MemoryStrategy implements Strategy {

    @Override
    public void setCache(String cache) {
        System.out.println("缓存到内存");
    }

    @Override
    public String getCache() {
        return "从内存获取到缓存";
    }
}

相关文章

网友评论

    本文标题:设计模式-策略模式

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