运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只能使用一个。
经常见到的是,所有的具体策略类都有一些公有的行为。这时候,就应当把这些公有的行为放到共同的抽象策略角色Strategy类里面。当然这时候抽象策略角色必须要用Java抽象类实现,而不能使用接口。 这其实也是典型的将代码向继承等级结构的上方集中的标准做法。
上次我们使用状态模式将数据按不同状态保存到不同地方,这里,我们使用策略模式来实现通过不同的策略来选择数据的保存方式。
首先是抽象的数据保持类(策略):
//策略public intece ISaveData { void save(Object data);}
然后是具体的数据保存类,三个(具体策略):
public class SaveToRedis implements ISaveData { @Override public void save(Object data) { System.out.println("数据:" data " 保存到Redis"); }}//具体策略public class SaveToFile implements ISaveData { @Override public void save(Object data) { System.out.println("数据:" data " 保存到文件"); }}//具体策略public class SaveToMysql implements ISaveData { @Override public void save(Object data) { System.out.println("数据:" data " 保存到Mysql"); }}
最后是客户端(环境Context):
//环境public class SaveClient { private ISaveData saveData; public SaveClient(ISaveData saveData){ this.saveData = saveData; } public void setSaveData(ISaveData saveData){ this.saveData = saveData; } public void save(Object data){ saveData.save(data); }}
使用:
public class TestUse { public static void main(String args[]){ Object data = "数据"; ISaveData saveData = new SaveToRedis(); SaveClient client = new SaveClient(saveData); client.save(data); client.setSaveData(new SaveToFile()); client.save(data); }}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-29.html
最起码也要先了解该产品的性质