面向对象组合方法——委托
最近在看 《设计模式之可复用面向对象软件基础》 里面讲到的委托的定义是:“两个对象参与处理一个请求, 接受请求的对象将操作委托给他的代理者”
思来想去怎么都理解不明白,在网上查了资料再加上自己对面向对象的理解 感觉是这么回事 对象A包含了对象B 那么 对象A接受了请求以后 将请求具体的处理交给对象B,对象B就是对象A的代理者
//定义对象A 大脑的接口 public interface Brain { void command(String weather); } //定义对象B 身体 public interface Operating { void getOper(); } public class Rain implements Operating { @Override public void getOper() { System.out.println("跑回家看电视"); } } public class Sun implements Operating { @Override public void getOper() { System.out.println("上街把妹"); } } public class BrainImpl implements Brain { //对象A包含对象B 大脑包含身体 ....虽然逻辑有些不对 Operating op = null; @Override public void command(String weather) { //大脑根据不同情况得到不同的身体实例 if (weather.equals("sun")) { op = new Sun(); } else if (weather.equals("rain")) { op = new Rain(); } //将操作交给身体进行 op.getOper(); } } public class test { public static void main(String[] args) { Brain b = new BrainImpl(); //大脑接受请求 这里为 感觉到要下雨 b.command("rain"); } }
委托方法的优点在于 它能在运行时动态的组合对象进行操作或改变对象的组合方式 上面的例子说明当大脑感知到要下雨的情况 身体即执行回家看电视的处理,如果是晴天的情况 那么就会得到把妹的结果。
上面的例子是个很简单的例子 其实代码中很多的设计都有用到委托的方法 比如说mvc的分层模型 假设action将插入记录的请求交给service, service接受请求转发给dao层, 由dao层执行插入 等等
先记下来 免得忘了