您的位置:首页 > 编程语言 > Java开发

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

2017-01-22 16:07 295 查看


春望 杜甫

国破山河在,城春草木深。感时花溅泪,恨别鸟惊心。

烽火连三月,家书抵万金。白头搔更短,浑欲不胜簪。

人与人之间少不了沟通,书信是一种很重要的沟通方式,尤其是当手机,电话,还没诞生之前,战乱年代,生灵涂炭,很多人梦想穿越,真过去了估计也就只能活一集,那时候书信就是一种很主要的传递信息的方式。



今天我们来聊得是命令模式:

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

类图:



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

角色:

(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("烽火连三月,家书抵万金。");
}

}


结果:



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: