面向对象组合方法——委托

最近在看 《设计模式之可复用面向对象软件基础》 里面讲到的委托的定义是:“两个对象参与处理一个请求, 接受请求的对象将操作委托给他的代理者” 

思来想去怎么都理解不明白,在网上查了资料再加上自己对面向对象的理解 感觉是这么回事 对象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层执行插入 等等

先记下来 免得忘了

posted on 2012-06-24 22:20  成就地带  阅读(474)  评论(0编辑  收藏  举报