Java实现事件委托,大话设计模式事件委托,观察者模式

 利用java1.8的函数式接口实现事件委托,结果是可行的,我不确定效果是否一致,大家帮忙一起看下。

package com.designmodel.designmodel.demo;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class ObserverDemo {


	@Test
	public void test(){
		Subject subject = new Boss();
		/*Observer observer = new NbaObserver();
		Observer touchFish = new TouchFishObserver();*/
		NbaObserver nbaObserver = new NbaObserver(subject);
		TouchFishObserver touchFishObserver = new TouchFishObserver(subject);

		subject.status = "taleile";
		List<UpdateInvoker> updateInvokerList = new ArrayList<>();
		updateInvokerList.add(nbaObserver::closeVideo);
		updateInvokerList.add(touchFishObserver::stopTouch);
		subject.notifyObserver(updateInvokerList);
	}




	abstract class Subject {

		protected String status;

		/*abstract void addObserver(Observer observer);

		abstract void removeObserver(Observer observer);*/

		abstract void notifyObserver(List<UpdateInvoker> updateInvokerList);

		public String getStatus() {
			return status;
		}

		public void setStatus(String status) {
			this.status = status;
		}
	}


	class Boss extends Subject {
		private List<Observer> observerList = new ArrayList<>();

	/*	@Override
		void addObserver(Observer observer) {
			observerList.add(observer);
		}

		@Override
		void removeObserver(Observer observer) {
			observerList.remove(observer);
		}*/

		@Override
		void notifyObserver(List<UpdateInvoker> updateInvokerList) {
			updateInvokerList.forEach(UpdateInvoker::update);
		}

	}


	class Secretary extends Subject {
		private List<Observer> observerList = new ArrayList<>();

	/*	@Override
		void addObserver(Observer observer) {
			observerList.add(observer);
		}

		@Override
		void removeObserver(Observer observer) {
			observerList.remove(observer);
		}
*/
		@Override
		void notifyObserver(List<UpdateInvoker> updateInvokerList) {
			updateInvokerList.forEach(UpdateInvoker::update);
		}

	}



	abstract class Observer {

		Subject subject;


		public Observer(Subject subject) {
			this.subject = subject;
		}

	}


	class NbaObserver{

		Subject subject;

		public NbaObserver(Subject subject) {
			this.subject = subject;
		}

		protected void closeVideo() {
			System.out.println("关闭NBA直播!" + subject.status);
		}
	}



	class TouchFishObserver{

		Subject subject;

		public TouchFishObserver(Subject subject) {
			this.subject = subject;
		}



		protected void stopTouch() {
			System.out.println("别摸了!" + subject.status);
		}
	}


	@FunctionalInterface
	interface UpdateInvoker {
		void update();
	}


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值