观察者模式

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();
    }
}
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值