package com.example.designmodel;
import java.util.ArrayList;
/**
* 观察者模式
*/
public class ObserverModel {
/**
* 观察者-车辆
*/
public interface Car{
void run(String event);
void stop(String event);
}
public class BlueCar implements Car{
private String name;
BlueCar(String name){
this.name = name;
}
/**
* 车子跑
*/
@Override
public void run(String event) {
System.out.println(event+" lighting,"+name+" run!");
}
/**
* 车子停
*/
@Override
public void stop(String event) {
System.out.println(event+" lighting,"+name+" stop!");
}
}
public class TrafficLights{
private final ArrayList<Car> cars = new ArrayList<>();
/**
* 添加观察者
* 向交通管理局注册车,上牌照才可以上路哦
*/
public void registerCar(Car car){
cars.add(car);
}
/**
* 删除观察者
* 取消车上路资格
*/
public void removeCar(Car car){
if(cars.contains(car)){
cars.remove(car);
}
}
/**
* 红灯亮了
*/
public void redLighting(){
cars.forEach(car -> car.stop("red"));
}
/**
* 绿灯亮了
*/
public void greenLighting(){
cars.forEach(car -> car.run("green"));
}
}
public static void main(String[] args){
ObserverModel observerModel = new ObserverModel();
BlueCar blueCar1 = observerModel.new BlueCar("blue1");
BlueCar blueCar2 = observerModel.new BlueCar("blue2");
TrafficLights trafficLights = observerModel.new TrafficLights();
//两个车在路口
trafficLights.registerCar(blueCar1);
trafficLights.registerCar(blueCar2);
//红灯亮了,都停下
trafficLights.redLighting();
//blueCar1酒驾拦住了,不允许上路
trafficLights.removeCar(blueCar1);
//绿灯亮了,都走吧
trafficLights.greenLighting();
}
}
;
观察者模式
最新推荐文章于 2024-10-07 21:28:19 发布