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

来源:互联网 发布:yum repolist卡死 编辑:程序博客网 时间:2024/06/06 01:34

春望 杜甫

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

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

       下面就一起来看下大清邮政局的例子,没有邮局之前,古代人报信都是差人去送,口耳相传,再原始点的方式就是烽火传信,狼烟滚滚。有了邮局后,一切变得轻松了,我们不管信怎么到对方那,是走陆路还是水路,是往北还是东,只要准备好信件,到邮局去发个命令,我要送信,剩下来的事情我就不关心了。
角色:
(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 0
原创粉丝点击