1.观察者模式
应用:多个对象依赖于一个对象时,能有效保证解耦;
特点:建立一种一对多的关系,一个对象发生变化其余对象都能知道并更新(JDK内置);
角色:Observable------抽象主题,被观察角色(JDK内置)
ConcreteObservable------具体主题,具体被观察角色,存入具体观察者,当发生变化时通知各观察者
Observer------抽象观察者(JDK内置,内置为接口);
ConcreteObservable------具体观察者;
java
java版本:
//具体观察者
public class ConcreteObserver implements Observer {
public String mName;
public ConcreteObserver (String name) {
mName = name;
}
@Override
public void update(Observable o,Object arg) {
Syetem.out.println("Hi,"+ mName +",更新了,内容:"+ arg);
}
}
//具体主题
public class RealSubject extends Observable {
public void postNewContent(String content) {
setChanget();//内置函数,表明标识或状态发送变化;
notifyObservers(content);//内置函数将新内容通知给所有观察者,content与update方法中的Object arg参数对应
}
}
//测试
public class Test {
public static void main(String[] args) {
ConcreteObserver concreteObserver1 = new ConcreteObserver ("A");
ConcreteObserver concreteObserver2 = new ConcreteObserver ("B");
ConcreteObserver concreteObserver3 = new ConcreteObserver ("C");
RealSubject realSubject = new RealSubject();
realSubject.addObserver(concreteObserver1 );//内置方法
realSubject.addObserver(concreteObserver2 );
realSubject.addObserver(concreteObserver3 );
realSubject.postNewContent("元宇宙新技术面世");
}
kotlin
kotlin版本:
class Test(var listener:(value:Int) -> Unit) {
listener.invoke(value)
var callBack : (result: String) -> Unit = {
}
}
val test = Test {
//对value进行处理
callBack = {
//对result值处理
}
}
2.状态机模式
State------状态下的行为,抽象或者接口类。
ConcreteState------具体状态下的具体行为。
Context------外部感兴趣的接口,维护一个State的实例,该实例定义了对象当前的状态。
java
public interface TvState{
public void nextChannel();
public void prevChannel();
public void turnUp();
public void turnDown();
}
public class PowerOnState implements TvState{
@Override
public void nextChannel(){
print("下一个频道");
}
@Override
public void prevChannel(){
print("上一个频道");
}
@Override
public void turnUp(){
print("调大音量");
}
@Override
public void turnDown(){
print("调小音量");
}
}
public class PowerOffState implements TvState{
@Override
public void nextChannel(){
}
@Override
public void prevChannel(){
}
@Override
public void turnUp(){
}
@Override
public void turnDown(){
}
}
public interface PowerController{
public void powerOn();
public void powerOff();
}
public class TvController implements PowerController{
private TvState tvState;
private setTvState(TvState tvState){
this.tvState = tvState;
}
@Override
public void powerOn(){
setTvState(PowerOnState);
}
@Override
public void powerOff(){
setTvState(PowerOffState);
}
public void nextChannel(){
tvState.nextChannel();
}
public void prevChannel(){
tvState.prevChannel();
}
public void turnUp(){
tvState.turnUp();
}
public void turnDown(){
tvState.turnDown();
}
}
TvController tvController = new TvController();
tvController.powerOn();//开机
tvController.nextChannel();//下一个频道
tvController.turnUp();//调大音量
tvController.powerOff();//关机
tvController.prevChannel();//上一个频道无效,关机后所有操作无效