//具体状态public enum SaveMiddleData implements ISaveData{ instance; @Override public void save(Object data) { System.out.println("保存到Mysql:" data); }}//具体状态public enum SaveBigData implements ISaveData{ instance; @Override public void save(Object data) { System.out.println("保存到文件:" data); }}
使用:
public class TestUse { public static void main(String args[]){ String smallData = "小数据"; String middleData = "介于小数据和大数据之间的数据"; String bifgData = "这里就假定这是一个很大很大很大的数据"; SaveDataController saveDataController = new SaveDataController(); saveDataController.save(smallData); saveDataController.save(middleData); saveDataController.save(bifgData); }}
输出:
保存到Redis:小数据保存到Mysql:介于小数据和大数据之间的数据保存到文件:这里就假定这是一个很大很大很大的数据
可以看到,我们对三种数据都使用了同一个对象的相同方法,但是行为是不同的,因为他们的状态不一样。
上面例子的状态更改是自动的,也可以添加setState()方法,手动切换状态,并在执行的方法体中不在自动判断状态。不过自动判断的,更智能一些,而手动切换状态的,可控性更好。
14、策略模式(Strategy Pattern)
定义一系列算法,把他们一个个封装起来,并且使他们可相互替换。本模式使得算法可独立于其他客户端而变化。
何时使用
优点
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。
策略模式中包括三种角色:
策略(Strategy):一个接口,定义了若干个算法(抽象方法)。 具体策略(ConcreteStrategy):策略的实现。 上下文/环境(Context):依赖于策略接口的类。
策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。
策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是完全一样的,正因为这个平等性,才能实现算法之间可以相互替换。所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的。所以可以这样描述这一系列策略算法:策略算法是相同行为的不同实现。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-28.html
总是在说甲午
难
朝鲜人民认为他们是世界上最幸福的人