被觀察者
/**
* @Author: chuan.bai
* @Description 郵件發(fā)送人
* @Date: Created on 15:03 2021/4/1
* @Modified By:
*/
public interface EmailSender {
/**
* 新增需要發(fā)送郵件的人
* @param emailReceiver
*/
void addUser(EmailReceiver emailReceiver);
/**
* 刪除需要發(fā)送郵件的人
* @param emailReceiver
*/
void removeUser(EmailReceiver emailReceiver);
/**
* 通知收件人接收郵件
* @param msg
*/
void sendMsgToUser(String msg);
}
觀察者抽象
/**
* @Author: chuan.bai
* @Description 郵件收件人
* @Date: Created on 15:03 2021/4/1
* @Modified By:
*/
public interface EmailReceiver {
/**
* 接收郵件
* @param msg
*/
void receiveEmailMsg(String name,String msg);
}
觀察者的實(shí)現(xiàn)類
/**
* @Author: chuan.bai
* @Description 收件人
* @Date: Created on 15:20 2021/4/1
* @Modified By:
*/
public class ReceiverUser implements EmailReceiver{
/**
* 收件人姓名
*/
private String name;
public ReceiverUser(String name) {
this.name = name;
}
@Override
public void receiveEmailMsg(String name, String msg) {
System.out.println("用戶" + this.name + "收到"+name+"的郵件內(nèi)容為:" + msg);
}
}
被觀察者的實(shí)現(xiàn)
/**
* @Author: chuan.bai
* @Description
* @Date: Created on 15:15 2021/4/1
* @Modified By:
*/
public class SenderUser implements EmailSender{
/**
* 聲明收件人列表
*/
private List<EmailReceiver> receiverList;
/**
* 發(fā)件人姓名
*/
private String name;
public SenderUser(String name) {
this.receiverList = new ArrayList<>();
this.name = name;
}
@Override
public void addUser(EmailReceiver emailReceiver) {
receiverList.add(emailReceiver);
}
@Override
public void removeUser(EmailReceiver emailReceiver) {
receiverList.remove(emailReceiver);
}
@Override
public void sendMsgToUser(String msg) {
//遍歷收件人列表 ,向他們?nèi)喊l(fā)郵件
for (EmailReceiver emailReceiver : receiverList) {
emailReceiver.receiveEmailMsg(this.name,msg);
}
}
}
客戶端
/**
* @Author: chuan.bai
* @Description 郵件客戶端
* @Date: Created on 15:26 2021/4/1
* @Modified By:
*/
public class EmailClient {
public static void main(String[] args) {
SenderUser senderUser = new SenderUser("系統(tǒng)用戶");
ReceiverUser receiverUser1 = new ReceiverUser("jack");
senderUser.addUser(receiverUser1);
senderUser.sendMsgToUser("發(fā)的第一郵件");
ReceiverUser receiverUser2 = new ReceiverUser("lucy");
//加入收件人2 也作為收件人列表
senderUser.addUser(receiverUser2);
senderUser.sendMsgToUser("發(fā)的第二封郵件");
}
}
結(jié)果
用戶jack收到系統(tǒng)郵箱的郵件內(nèi)容為:發(fā)的第一郵件
用戶jack收到系統(tǒng)郵箱的郵件內(nèi)容為:發(fā)的第二封郵件
用戶lucy收到系統(tǒng)郵箱的郵件內(nèi)容為:發(fā)的第二封郵件
同時(shí)是觀察者和被觀察者
/**
* @Author: chuan.bai
* @Description 郵件收發(fā)人 (既能收郵件又能發(fā)郵件)
* @Date: Created on 15:36 2021/4/1
* @Modified By:
*/
public class ReceiverAndSender implements EmailSender,EmailReceiver{
private List<EmailReceiver> receiverUserList;
private String name;
public ReceiverAndSender(String name) {
this.receiverUserList = new ArrayList<>();
this.name = name;
}
@Override
public void receiveEmailMsg(String name, String msg) {
System.out.println("用戶" + this.name + "收到"+name+"的郵件內(nèi)容為:" + msg);
}
@Override
public void addUser(EmailReceiver emailReceiver) {
receiverUserList.add(emailReceiver);
System.out.println("收件人增加");
}
@Override
public void removeUser(EmailReceiver emailReceiver) {
receiverUserList.remove(emailReceiver);
System.out.println("收件人剔除");
}
@Override
public void sendMsgToUser(String msg) {
//遍歷收件人列表 ,向他們?nèi)喊l(fā)郵件
for (EmailReceiver emailReceiver : receiverUserList) {
emailReceiver.receiveEmailMsg(this.name,msg);
}
}
}
客戶端
/**
* @Author: chuan.bai
* @Description
* @Date: Created on 15:50 2021/4/1
* @Modified By:
*/
public class EmailClient2 {
public static void main(String[] args) {
ReceiverAndSender jack = new ReceiverAndSender("jack");
ReceiverAndSender bill = new ReceiverAndSender("bill");
ReceiverAndSender lucy = new ReceiverAndSender("lucy");
jack.addUser(bill);
jack.addUser(lucy);
jack.sendMsgToUser("aaa");
bill.addUser(jack);
bill.addUser(lucy);
bill.sendMsgToUser("cc");
lucy.addUser(bill);
lucy.addUser(jack);
lucy.sendMsgToUser("dd");
}
}
執(zhí)行結(jié)果
收件人增加
收件人增加
用戶bill收到j(luò)ack的郵件內(nèi)容為:aaa
用戶lucy收到j(luò)ack的郵件內(nèi)容為:aaa
收件人增加
收件人增加
用戶jack收到bill的郵件內(nèi)容為:cc
用戶lucy收到bill的郵件內(nèi)容為:cc
收件人增加
收件人增加
用戶bill收到lucy的郵件內(nèi)容為:dd
用戶jack收到lucy的郵件內(nèi)容為:dd