在《[设计模式](十):策略模式(Strategy)与模板模式(Template)详解及二者间区别介绍》中我们对11种行为模式进行了分类,并介绍了的父子关系类中的策略模式与模板模式。
今天讲讲四种类间关系类的行为模式:观察者模式、迭代器模式、责任链模式、命令模式。
>什么是观察者模式
观察者模式定义了一种一对多的依赖关系,当被观察对象状态改变时,所有观察者都能收到信息。(又被称为发布-订阅模式)
先上一个UML图,然后由实例引出具体的实现:
在玩CS游戏时,如果一个玩家被击杀,在积分榜单和右上角都会有提示和记录。这是怎么做到的呢?看下面这个代码:
abstract class Roles{//被观察者
val scoreBorads:MutableList<Borad> = mutableListOf()//观察者的列表
abstract val name:String
abstract fun registerObserver(borad:Borad)//注册一个该对象的观察者
abstract fun removeObserver(borad:Borad)//移除一个该对象的观察者
abstract fun notifyObserver()//一旦自身状态改变,通知观察者
}
abstract class Borad(){//观察者
abstract fun update(r:Roles)//观察者更新数据
}
//以上两个类的具体实现类
class CT(n:String):Roles(){
override val name = n
override fun registerObserver(borad:Borad) {
scoreBorads.add(borad)
}
override fun removeObserver(borad:Borad) {
scoreBorads.remove(borad)
}
override fun notifyObserver() {
scoreBorads.forEach { it.update(this) }
}
fun getKill(){//若该玩家被击杀
notifyObserver()//通知所有的观察者
}
}
c