13、接口应用——策略模式
策略模式(Strategy Pattern),定义了一系列算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的用户而独立变化。
如果我们只用类的方式添加data,就会有很多的子类
abstract class BaseServer
{
public abstract void save(String data);
}
class UserServes extends BaseServer
{
public void save(String data)
{
System.out.println("把数据保存到文件中..."+data);
}
}
class NetServes extends BaseServer
{
public void save(String data)
{
System.out.println("把数据保存到网络中..."+data);
}
}
如果我们用策略模式,就可以把上面的save方法换成接口的模式
/*主函数中user.setISave();里面的new后面可以换成NetSave()或者UserSave()这两个从接口定下来的类,比上面的代码简单
这是把可变的行为抽象出来(这里可变的行为是new后面的方法)*/
public class Demo1
{
public static void main(String[] args)
{
BaseServices user = new UserServices();
user.setISave(new NetSave());
user.add("你好呀");
}
}
interface ISave //先定义一个接口中的策略模式
{
public void save(String data);
}
class FileSave implements ISave
{
public void save(String data)
{
System.out.println("把数据保存到文件中..." + data);
}
}
class NetSave implements ISave
{
public void save(String data)
{
System.out.println("把数据保存到网络中..." + data);
}
}
abstract class BaseService
{
private ISave iSave;
public void setISave(ISave iSave)
{
this.iSave = iSave;
}
public void add(String data)
{
System.out.println("检查数据合法性...");
iSave.save(data);
System.out.println("数据保存完毕");
}
}
class UserService extends BaseService
{
}
/*
结果:
检查数据合法性...
把数据保存到网络中...你好呀
数据保存完毕
*/
OO设计原则:
1、面向接口编程(面向抽象编程)
2、封装变化
3、多用组合,少用继承