java设计模式大话之命令模式

春望 杜甫

国破山河在,城春草木深。感时花溅泪,恨别鸟惊心。
烽火连三月,家书抵万金。白头搔更短,浑欲不胜簪。
人与人之间少不了沟通,书信是一种很重要的沟通方式,尤其是当手机,电话,还没诞生之前,战乱年代,生灵涂炭,很多人梦想穿越,真过去了估计也就只能活一集,那时候书信就是一种很主要的传递信息的方式。

今天我们来聊得是命令模式:
将来自客户端的请求封装成一个对象,我们 不需要了解这个请求会被怎么处理,以及这个请求被接收后的具体细节。实现了请求者跟实现者之间的解耦。具体做法就是在请求者和目标者之间增加一个中间人的角色,来达到解除耦合的目的。
类图:

       下面就一起来看下大清邮政局的例子,没有邮局之前,古代人报信都是差人去送,口耳相传,再原始点的方式就是烽火传信,狼烟滚滚。有了邮局后,一切变得轻松了,我们不管信怎么到对方那,是走陆路还是水路,是往北还是东,只要准备好信件,到邮局去发个命令,我要送信,剩下来的事情我就不关心了。
角色:
(1)发信人
(2)邮局
(3)收信人
代码实现:
/**
 * @author Administrator
 *  信件接收者
 */
public class Receiver {
       public void readMail(String message){
    	  System.out.println("收件人读取信件:"+message);
       }
}



public interface IPost {
   public void sendMail(String message);
}




/**
 * @author Administrator
 * 邮局角色
 */
public class Post implements IPost{
    private final Receiver recevier;
    public Post(Receiver recevier)
    {
       this.recevier=recevier;	
    }
    
    
	public void sendMail(String message) {
		
		this.recevier.readMail(message);
	}

}



/**
 * @author Administrator
 * 发信人角色,只引用了邮局对象实例,没有与收件人发生任何关联,可以说发信人和收信人之间没有任何联系,双方就是通过邮局中间人获得通信
 */
public class Invoke {
   private IPost post;
   public void setPost(IPost post)
   {
	  this.post=post;   
   }
   
   public void sendMail(String message){
	   System.out.println("发信人投递信件给邮局");
	   this.post.sendMail(message);
   }
}


//客户端
public class PostOffice {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
        Receiver rec=new Receiver();
        IPost post=new Post(rec);
        Invoke invoke=new Invoke();
        invoke.setPost(post);
        invoke.sendMail("烽火连三月,家书抵万金。");
	}

}

结果:


结构可以看出,发信人,邮局,收信人之间可以正常运行,信件经邮局发送到收件人手中,发件人跟收件人没有关联。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值