设计模式——行为型

1.观察者模式

应用:多个对象依赖于一个对象时,能有效保证解耦;
特点:建立一种一对多的关系,一个对象发生变化其余对象都能知道并更新(JDK内置);
角色:Observable——抽象主题,被观察角色(JDK内置)
ConcreteObservable——具体主题,具体被观察角色,存入具体观察者,当发生变化时通知各观察者
Observer——抽象观察者(JDK内置,内置为接口);
ConcreteObservable——具体观察者;

java版本:
//具体观察者
public class ConcreteObserver implements Observer {public String mName;public ConcreteObserver (String name) {mName = name;}@Overridepublic 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版本:
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的实例,该实例定义了对象当前的状态。

public interface TvState{public void nextChannel();public void prevChannel();public void turnUp();public void turnDown();
}
public class PowerOnState implements TvState{@Overridepublic void nextChannel(){print("下一个频道");}@Overridepublic void prevChannel(){print("上一个频道");}@Overridepublic void turnUp(){print("调大音量");}@Overridepublic void turnDown(){print("调小音量");}
} 
public class PowerOffState implements TvState{@Overridepublic void nextChannel(){}@Overridepublic void prevChannel(){}@Overridepublic void turnUp(){}@Overridepublic 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;}@Overridepublic void powerOn(){setTvState(PowerOnState);}@Overridepublic 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();//上一个频道无效,关机后所有操作无效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/48492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】POIROT:关联攻击行为与内核审计记录以寻找网络威胁(CCS-2019)

POIROT: Aligning Attack Behavior with Kernel Audit Records for Cyber Threat Hunting CCS-2019 伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校 Milajerdi S M, Eshete B, Gjomemo R, et al. Poirot: Aligning attack behavior with kernel audit records for cyber thre…

idea http request无法识别环境变量

问题描述 创建了环境变量文件 http-client.env.json,然后在*.http 文件中引用环境变量,运行 HTTP 请求无法读取环境变量文件中定义的变量。 事故现场 IDEA 版本:2020.2 2021.2 解决步骤 2020.2 版本环境变量无法读取 2021.2 版本从 2020.…

lesson9: C++多线程

1.线程库 1.1 thread类的简单介绍 C11 中引入了对 线程的支持 了&#xff0c;使得 C 在 并行编程时 不需要依赖第三方库 而且在原子操作中还引入了 原子类 的概念。要使用标准库中的线程&#xff0c;必须包含 < thread > 头文件 函数名 功能 thread() 构造一个线程对象…

探工业互联网的下一站!腾讯云助力智造升级

引言 数字化浪潮正深刻影响着传统工业形态。作为第四次工业革命的重要基石&#xff0c;工业互联网凭借其独特的价值快速崛起&#xff0c;引领和推动着产业变革方向。面对数字化时代给产业带来的机遇与挑战&#xff0c;如何推动工业互联网的规模化落地&#xff0c;加速数字经济…

Ubuntu 新服务器基本环境下载conda + docker + docker-compose + git

文章目录 允许root用户登录condadockerdocker-composegit 允许root用户登录 # 以普通用户登录系统&#xff0c;创建root用户的密码 sudo passwd root# SSH 放行 sudo sed -i s/^#\?PermitRootLogin.*/PermitRootLogin yes/g /etc/ssh/sshd_config; sudo sed -i s/^#\?Passwo…

VX小程序 实现区域转图片预览

方法一 1、安装插件 wxml2canvas npm install --save wxml2canvas 2、类型 // 小程序页面 let data{list:[{type:wxml,class:.test_center .draw_canvas,limit:.test_center,x:0,y:0}] } 3、数据结构 let testData[{PageIndex:1,ImageUrl:"https://minio.23544.com:…

【C语言】数组概述

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将带你了解 一维数组&#xff0c;二维数组等相关知识。 目录&#xff1a; &#x1f4d8;前言&#xff1a;&#x1f…

Chrome谷歌浏览器修改输入框自动填充样式

Chrome谷歌浏览器修改输入框自动填充样式 背景字体 背景 input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px #fff inset !important; }字体 input:-internal-autofill-selected {-webkit-text-fill-color: #000 !important; }

KaiwuDB CTO 魏可伟:回归用户本位,打造“小而全”的数据库

8月16日&#xff0c;KaiwuDB 受邀亮相第十四届中国数据库技术大会 DTCC 2023。KaiwuDB CTO 魏可伟接受大会主办方的采访&#xff0c;双方共同围绕“数据库架构演进、内核引擎设计以及不同技术路线”展开深度探讨。 以下是采访的部分实录 ↓↓↓ 40 多年前&#xff0c;企业的数…

html动态爱心代码【三】(附源码)

目录 前言 特效 内容修改 完整代码 总结 前言 七夕马上就要到了&#xff0c;为了帮助大家高效表白&#xff0c;下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;表白等场景&#xff0c;可直…

OrienterNet: visual localization in 2D public maps with neural matching 论文阅读

论文信息 题目&#xff1a;OrienterNet: visual localization in 2D public maps with neural matching 作者&#xff1a;Paul-Edouard Sarlin&#xff0c; Daniel DeTone 项目地址&#xff1a;github.com/facebookresearch/OrienterNet 来源&#xff1a;CVPR 时间&#xff1a…

win10 下运行 npm run watch-poll问题

背景&#xff1a;在本地练习laravel项目&#xff0c;windows 宝塔环境&#xff08;之前装过ubuntu子系统&#xff0c;很慢&#xff0c;就放弃了。有知道的兄弟说下&#xff0c;抱拳&#xff09;。以下命令我是在本地项目中用git bash里运行的&#xff0c;最好用管理员权限打开你…

el-upload组件调用后端接口上传文件实践

要点说明&#xff1a; 使用:http-request覆盖默认的上传行为&#xff0c;可以添加除文件外的其他参数&#xff0c;注意此时仍需保留action属性&#xff0c;action可以传个空串给http-request属性绑定的函数&#xff0c;函数入参必须为param调用接口请求&#xff0c;注意 heade…

Django实现音乐网站 ⒀

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是推荐页-推荐排行榜、推荐歌手功能开发。 目录 推荐页开发 推荐排行榜 单曲表增加播放量 表模型增加播放量字段 执行表操作 模板中显示外键对应值 表模型外键设置 获取外键对应模型值 推荐排行榜视图 推…

函数式编程

函数式编程 函数式编程思想&#xff1a;对方法中的数据进行了什么操作 优点&#xff1a;代码简介、便于理解、易于并发编程 1.Lambda表达式 JDK8中的语法糖&#xff0c;可以对某些匿名内部类的写法进行简化 使用条件&#xff1a;匿名内部类是一个接口&#xff0c;并且接口只…

ERROR in static/js/xxx.js from UglifyJs

老项目用的webpack3&#xff0c;打包的时候遇到**ERROR in static/js/xxx.js from UglifyJs**这个报错&#xff0c; UglifyJS是个包含JS解释器、代码最小化、压缩、美化的工具集&#xff0c;是前端开发打包的最常用工具之一&#xff0c;只支持ES5&#xff0c;不支持ES6&#x…

GraphScope,开源图数据分析引擎的领航者

文章首发地址 GraphScope是一个开源的大规模图数据分析引擎&#xff0c;由Aliyun、阿里巴巴集团和华为公司共同开发。GraphScope旨在为大规模图数据处理和分析提供高性能、高效率的解决方案。 Github地址&#xff1a; https://github.com/alibaba/GraphScope GraphScope 的重…

【电商领域】Axure在线购物商城小程序原型图,抖音商城垂直电商APP原型

作品概况 页面数量&#xff1a;共 60 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;网上商城、品牌自营商城、商城模块插件 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为品牌自营网上商城…

logstash配置文件

input { kafka { topics > “xxxx” bootstrap_servers > “ip:port” auto_offset_reset > “xxxx” group_id > “xxxx” consumer_threads > 3 codec > “json” } } filter { grok { match > { “message” > ‘%{IP:client_ip} - - [%{HTTPDATE:…

ios 声网agora 音视频直播场景下的集成总结

文章目录 一、前言二、视频会议场景2.1 场景描述2.2 功能列表三、电商直播场景3.1 场景描述3.2 功能列表3.3 技术方案四、声网iOS SDK集成4.1 集成4.2 示例demo4.3 核心代码4.3.1 初始化4.3.2 加入频道4.3.3 切换身份4.4.4 连麦4.4 相关问题4.4.1 监听观众角色用户事件五、相关…