设计模式——行为型

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();//上一个频道无效,关机后所有操作无效
相关推荐
alonewolf_9922 分钟前
深入Spring核心原理:从Bean生命周期到AOP动态代理全解析
java·后端·spring
天远Date Lab23 分钟前
Python实现用户消费潜力评估:天远个人消费能力等级API对接全攻略
java·大数据·网络·python
没有bug.的程序员8 小时前
服务安全:内部服务如何防止“裸奔”?
java·网络安全·云原生安全·服务安全·零信任架构·微服务安全·内部鉴权
一线大码8 小时前
SpringBoot 3 和 4 的版本新特性和升级要点
java·spring boot·后端
weixin_440730508 小时前
java数组整理笔记
java·开发语言·笔记
weixin_425023008 小时前
Spring Boot 实用核心技巧汇总:日期格式化、线程管控、MCP服务、AOP进阶等
java·spring boot·后端
一线大码8 小时前
Java 8-25 各个版本新特性总结
java·后端
2501_906150569 小时前
私有部署问卷系统操作实战记录-DWSurvey
java·运维·服务器·spring·开源
better_liang9 小时前
每日Java面试场景题知识点之-TCP/IP协议栈与Socket编程
java·tcp/ip·计算机网络·网络编程·socket·面试题
niucloud-admin9 小时前
java服务端——controller控制器
java·开发语言