当前位置: 首页 > news >正文

中山人才招聘网官网青岛网站建设优化

中山人才招聘网官网,青岛网站建设优化,如何做高大上的网站 知乎,辽宁千山科技做网站怎么样一. 前言 学习RxJava,少不了介绍它的设计模式。但我看大部分文章,都是先将其用法介绍一通,然后再结合其用法,讲解其设计模式。这样当然有很多好处,但我个人觉得,这种介绍方式,对于没有接触过Rx…

一. 前言

学习RxJava,少不了介绍它的设计模式。但我看大部分文章,都是先将其用法介绍一通,然后再结合其用法,讲解其设计模式。这样当然有很多好处,但我个人觉得,这种介绍方式,对于没有接触过RxJava的朋友来说,是不太友好的。

而我,更倾向于,先把对设计模式的认知,拉齐,然后在讲到用法的时候,大家就会自然而然地理解了它怎么用到的设计模式,从而也就更容易理解源码了,一切都是水到渠成。

所以,在本篇文章中,大部分内容依然不会涉及RxJava,但其实处处都有RxJava的影子。你需要做的就是完全理解本篇文章的内容,没有理解到的地方请留言,我都会一个一个认真看的。
不啰嗦了,让我们开始正题吧!

二. 观察者模式

1. 什么是观察者模式?

一个比较书面化的定义是:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。

通俗一点理解,假如说有两种对象,一个是观察者,一个是被观察者,当一个被观察者对象发生变化的时候,可以通知到所有的观察者对象。所有的观察者对象在接收到这个通知的时候,可以做一些自己的处理。

2. Android中有没有例子?

在Android中,观察者模式其实很常见,比如点击事件监听,当view被点击的时候,会通知到它的观察者,也就是调用到你实现的onClick方法。再比如说EventBus,比如LiveData,其实都有运用到观察者模式。

3. 写个代码?

本着KISS原则(Keep It Simple, Stupid),观察者模式比较简单,所以在这里,就不写代码了。
但值得一提的是,RxJava中运用到的观察者模式,和这里有一点微小的差别,但根本思想是一样的。至于是什么微小的差别,等讲到RxJava原理的时候,你就理解了。

三. 装饰器模式

1. 什么是装饰器模式?

可以通俗地理解为,在不改变原有对象的基础上,增强原有对象的功能。

2. Android中有没有例子?

我们天天接触的Context,就是一个非常典型的装饰器模式的例子。

Android中的Context对象是一个核心的组件,它经常被装饰器进行功能扩展和定制。例如,Activity、Service、BroadcastReceiver等都是Context的子类,它们在基本的Context功能上添加了更多的生命周期管理、界面交互和事件处理等功能。

相当于在没有修改Context的基础上,对Context进行了功能的增强。

3. 写个代码?

因为我们平时关于装饰器模式,写的不是很多,所以我觉得有必要,以一个很简单的例子,向大家再进一步介绍下装饰器模式。
假设你经营一家咖啡店,你的顾客可以根据自己的口味定制咖啡。首先,我们有一个抽象的咖啡接口

public interface Coffee {String getDescription();double getCost();
}

然后,我们还有一个具体的咖啡实现

public class SimpleCoffee implements Coffee {@Overridepublic String getDescription() {return "Simple Coffee";}@Overridepublic double getCost() {return 1.0;}
}

现在,我们不满足于一个简单的咖啡(SimpleCoffee),而是要有一个可以加入牛奶的咖啡。相当于对原有的咖啡功能进行增强,这时,我们就可以借助装饰器模式来实现。
首先,声明一个装饰器模式的抽象类,也实现Coffee接口。

public abstract class CoffeeDecorator implements Coffee {protected Coffee coffee;public CoffeeDecorator(Coffee coffee) {this.coffee = coffee;}@Overridepublic String getDescription() {return coffee.getDescription();}@Overridepublic double getCost() {return coffee.getCost();}
}

然后,可以创建一个具体的装饰器类

public class MilkDecorator extends CoffeeDecorator {public MilkDecorator(Coffee coffee) {super(coffee);}@Overridepublic String getDescription() {return super.getDescription() + ", Milk";}@Overridepublic double getCost() {return super.getCost() + 0.5;}
}

这样我们在使用的时候,顾客可以选择加入咖啡,而不会改变原有的咖啡类

Coffee simpleCoffee = new SimpleCoffee();
Coffee coffeeWithMilk = new MilkDecorator(simpleCoffee);
System.out.println(coffeeWithMilk.getDescription());  // 输出:Simple Coffee, Milk
System.out.println(coffeeWithMilk.getCost());  // 输出:1.5

为什么实现了同一个接口?

这里大家也会发现一个细节,就是装饰器类,和被装饰类,都实现了同一个接口,在这个例子中就是Coffee接口。这样做的好处就是可以统一以Coffee来接收装饰器类和被装饰类,这使得客户端可以根据需求自由组合装饰器对象,以获得所需的功能组合,方便多次嵌套,自己可以作为装饰器类,也可以作为被装饰类,实现更灵活,符合“基于接口而非实现”的规范。

举个例子,假如客户还想加糖,那么就可以新增一个加糖的装饰器类

public class SugerDecorator extends CoffeeDecorator {public SugerDecorator(Coffee coffee) {super(coffee);}@Overridepublic String getDescription() {return super.getDescription() + ", Suger";}@Overridepublic double getCost() {return super.getCost() + 0.3;}
}

然后顾客如果既想加糖,又想加牛奶,就可以这样实现:

Coffee simpleCoffee = new SimpleCoffee();
Coffee coffeeWithMilk = new MilkDecorator(simpleCoffee);
Coffee coffeeWithSuger = new SugerDecorator(coffeeWithMilk);

可以看到,MilkDecorator本身既是装饰器类,也是被装饰类,使得原有对象的功能,可以定制化地增强。而能够实现这些的原因,就是装饰器类和被装饰类,实现了同一个接口

四. 总结

本篇文章内容就到这里了,其实本篇文章没有提到RxJava的具体知识,但其实处处都有RxJava的影子。在本篇文章中,你只需要牢牢掌握观察者模式和装饰器模式,理解我举的例子,就可以了。等看到RxJava的原理的文章时,你就会豁然开朗!

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap

http://www.yidumall.com/news/84677.html

相关文章:

  • 网站建设业务越做越累无锡seo公司哪家好
  • 网推是做什么的怎么做好seo推广
  • 济南网站开发企业seop
  • 又做投资的网站吗营业推广的形式包括
  • 出入库软件永久免费搜索引擎优化seo什么意思
  • wap网站 微信登录网站统计分析工具
  • 顶呱呱集团 网站建设百度热搜 百度指数
  • bootsrap做app网站seo优化一般多少钱
  • wordpress支持哪些数据库南宁百度seo价格
  • 网站首页制作怎么做的百度提交收录
  • json做网站的数据库怎么找百度客服
  • 新媒体、网站建设 管理规范广州代运营公司有哪些
  • 做视频网站多大空间够谷歌广告联盟怎么做
  • 做网站不打广告怎么赚钱企业网站推广的方法
  • 佛山市住房和城乡建设委员会网站百度地图收录提交入口
  • 互联网网站开发的未来方向搜狗搜索引擎入口
  • zencart 网站迁移seo高级教程
  • 怎么做网站服务器免费建站平台哪个好
  • 做冻品的网站实体店营销方案
  • 电脑城网站开发需求分析市场推广计划方案
  • 专业的东莞网站设计百度网盘下载速度慢破解方法
  • 瑞安公司做网站百度精准搜索
  • 科技公司网站模板官网seo黑帽技术工具
  • 庐山网站建设推广方案如何写
  • 公司网站建设属于软件销售买号链接
  • 网站做302跳转的意义seo推广沧州公司电话
  • 做网站前端用什么语言企业网络营销策划书
  • 深圳网博网站建设谷歌seo优化中文章
  • 物联网官网seo网络营销招聘
  • 学校网站建设报价单山西seo优化公司