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

转自:http://www.cnblogs.com/blessed/archive/2012/06/24/weituo1.html


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

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

先记下来 免得忘了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值