设计模式——行为型

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();//上一个频道无效,关机后所有操作无效
相关推荐
AI风老师40 分钟前
5、docker镜像管理命令
java·docker·eureka
用户84913717547161 小时前
JustAuth实战系列(第5期):建造者模式进阶 - AuthRequestBuilder设计解析
java·设计模式·架构
只因在人海中多看了你一眼1 小时前
B.10.01.5-电商系统的设计模式应用实战
设计模式
励志成为糕手2 小时前
从反射到方法句柄:深入探索Java动态编程的终极解决方案
java·开发语言
是乐谷2 小时前
饿了么招java开发咯
java·开发语言·人工智能·程序人生·面试·职场和发展
zhysunny2 小时前
20.万物皆可变身术:状态模式架构全景解析
java·状态模式
hongjunwu2 小时前
Java集合的遍历方式(全解析)
java·开发语言·windows
cccc来财2 小时前
Golang的本地缓存freecache
java·开发语言·jvm
Barcke2 小时前
缓存界的 "双保险":打工人救星来了!(本地缓存 + Redis 双剑合璧,轻松应对高并发)
java·后端
用户84913717547162 小时前
JDK 17 实战系列(第5期):开发工具与API增强详解
java·jvm·架构