Unity开发:观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。

在观察者模式中,有两个核心角色:主题(Subject)和观察者(Observer)。

  • 主题(Subject):也称为被观察者或可观察对象,维护一组观察者,并提供方法用于添加、删除和通知观察者。当主题的状态发生变化时,它会主动通知所有已注册的观察者。
  • 观察者(Observer):表示接收主题通知的对象。观察者需要实现一个特定的接口或抽象类,该接口或抽象类定义了接收通知的方法。当主题状态发生变化时,观察者会根据通知进行相应的更新操作。

观察者模式的优点包括:

  • 松耦合:主题与观察者之间是松耦合的关系,主题只需要知道观察者的接口,而不需要知道具体的实现。
  • 可扩展性:可以方便地增加新的观察者或主题,而无需修改现有代码。
  • 一致性:主题状态发生变化时,所有观察者都会得到相应的通知和更新,保持数据的一致性。
    // 主题接口
    interface Subject {
        void registerObserver(Observer observer);
        void removeObserver(Observer observer);
        void notifyObservers();
    }
    
    // 观察者接口
    interface Observer {
        void update();
    }
    
    // 具体主题类
    class ConcreteSubject implements Subject {
        private List<Observer> observers = new ArrayList<>();
        private int state;
    
        public void setState(int state) {
            this.state = state;
            notifyObservers();
        }
    
        public int getState() {
            return state;
        }
    
        public void registerObserver(Observer observer) {
            observers.add(observer);
        }
    
        public void removeObserver(Observer observer) {
            observers.remove(observer);
        }
    
        public void notifyObservers() {
            for (Observer observer : observers) {
                observer.update();
            }
        }
    }
    
    // 具体观察者类
    class ConcreteObserver implements Observer {
        private String name;
        private ConcreteSubject subject;
    
        public ConcreteObserver(String name, ConcreteSubject subject) {
            this.name = name;
            this.subject = subject;
        }
    
        public void update() {
            System.out.println(name + " 收到更新,新状态为 " + subject.getState());
        }
    }
    
    // 示例程序
    public class ObserverPatternExample {
        public static void main(String[] args) {
            ConcreteSubject subject = new ConcreteSubject();
            ConcreteObserver observer1 = new ConcreteObserver("Observer 1", subject);
            ConcreteObserver observer2 = new ConcreteObserver("Observer 2", subject);
            
            subject.registerObserver(observer1);
            subject.registerObserver(observer2);
            
            subject.setState(1);
            // 输出:
            // Observer 1 收到更新,新状态为 1
            // Observer 2 收到更新,新状态为 1
            
            subject.setState(2);
            // 输出:
            // Observer 1 收到更新,新状态为 2
            // Observer 2 收到更新,新状态为 2
            
            subject.removeObserver(observer2);
            subject.setState(3);
            // 输出:
            // Observer 1 收到更新,新状态为 3
        }
    }
    

    这是一个简单的观察者模式示例,主题(ConcreteSubject)维护了一组观察者(ConcreteObserver),当主题状态发生变化时,通知所有注册的观察者进行更新。观察者收到通知后,执行相应的操作。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当使用Unity进行游戏开发时,设计模式是一种非常有用的工具,可以帮助我们组织和管理代码。下面是一些常见的Unity设计模式速记: 1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。在Unity中,可以使用静态变量或者DontDestroyOnLoad方法来实现单例模式。 2. 工厂模式(Factory Pattern):通过一个工厂类来创建对象,而不是直接在代码中实例化。这样可以降低代码的耦合性,并且方便后续的扩展和修改。 3. 观察者模式(Observer Pattern):定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Unity中,可以使用事件(Event)或委托(Delegate)来实现观察者模式。 4. 命令模式(Command Pattern):将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化。在Unity中,可以使用委托来实现命令模式,将方法封装成委托对象,并在需要的时候执行。 5. 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为。在Unity中,可以使用状态机(StateMachine)或者有限状态机(Finite State Machine)来实现状态模式。 6. 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构。在Unity中,可以使用GameObject的层级关系来实现组合模式。 7. 享元模式(Flyweight Pattern):通过共享对象来减少内存使用和提高性能。在Unity中,可以使用对象池(Object Pool)来实现享元模式,重复使用已经创建的对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值