zoukankan      html  css  js  c++  java
  • 观察者设计模式

    观察者模式中有观察者Observer和被观察者Subject。Subject里有一个arrayList之类的数据结构存储着这些观察者的实例对象,当Subject有变化时,就会通知这些Observer

    public interface Observer {
        public void update();
    }
    //被观察者
    abstract public class Subject {
     
        private List<Observer> observerList = new ArrayList<Observer>();
     
        public void attachObserver(Observer observer) {
            observerList.add(observer);
        }
     
        public void detachObserver(Observer observer){
            observerList.remove(observer);
        }
     
        public void notifyObservers(){
            for (Observer observer: observerList){
                observer.update();
            }
        }
    //怪物
    public class Monster implements Observer {
     
        @Override
        public void update() {
            if(inRange()){
                System.out.println("怪物 对主角攻击!");
            }
        }
     
        private boolean inRange(){
            //判断主角是否在自己的影响范围内,这里忽略细节,直接返回true
            return true;
        }
    }
     
    //陷阱
    public class Trap implements Observer {
     
        @Override
        public void update() {
            if(inRange()){
                System.out.println("陷阱 困住主角!");
            }
        }
     
        private boolean inRange(){
            //判断主角是否在自己的影响范围内,这里忽略细节,直接返回true
            return true;
        }
    }
     
    //宝物
    public class Treasure implements Observer {
     
        @Override
        public void update() {
            if(inRange()){
                System.out.println("宝物 为主角加血!");
            }
        }
     
        private boolean inRange(){
            //判断主角是否在自己的影响范围内,这里忽略细节,直接返回true
            return true;
        }
    }
    public class Hero extends Subject{
        void move(){
            System.out.println("主角向前移动");
            notifyObservers();
        }
    }
    public class Client {
        public static void main(String[] args) {
            //初始化对象
            Hero hero = new Hero();
            Monster monster new Monster();
            Trap trap new Trap();
            Treasure treasure new Treasure();
            //注册观察者
            hero.attachObserver(monster);
            hero.attachObserver(trap);
            hero.attachObserver(treasure);
            //移动事件
            hero.move();
        }
    }
  • 相关阅读:
    .NET下的并行开发
    .NET下单文件的上传处理
    .NET下dropdownlist的基本操作
    [Python3网络爬虫开发实战] 3.1.1-发送请求
    [Python3网络爬虫开发实战] 3.1.2-处理异常
    [Python3网络爬虫开发实战] 3.1-使用urllib
    [Python3网络爬虫开发实战] 2.4-会话和Cookies
    [Python3网络爬虫开发实战] 2.5-代理的基本原理
    [Python3网络爬虫开发实战] 2.3-爬虫的基本原理
    [Python3网络爬虫开发实战] 2.2-网页基础
  • 原文地址:https://www.cnblogs.com/lzh66/p/13285543.html
Copyright © 2011-2022 走看看