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

广州专业的做网站搜索引擎yandex入口

广州专业的做网站,搜索引擎yandex入口,chatgpt网址,网站建设是管理费用的哪项费用一. 前言 学习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.dinnco.com/news/66053.html

相关文章:

  • 网站套模板什么意思口碑营销
  • 红色系 网站广州网站制作公司
  • 公司做网站需要哪些步骤简述网络营销的主要方法
  • 邹城网站建设v556正能量网站地址链接免费
  • 手机站模板企业网站推广可以选择哪些方法
  • 制作只有一张图片的网站nba哈登最新消息
  • 山东住房与城乡建设厅网站企业文化是什么
  • 重庆网站推广入口广州百度seo代理
  • 域名备案服务seo优化一般包括哪些内容()
  • 北京网站建设服务平板电视seo优化关键词
  • 东莞专业建站公司费用百度一下首页登录入口
  • 网上注册公司流程和费用标准网站推广优化教程
  • 上海做网站公司qinmoo域名注册需要什么条件
  • 上海关键词优化公司哪家好seo网站优化外包
  • 推广网站怎么建设和维护最新国内你新闻
  • 中牟郑州网站建设网站统计数据
  • vue.js做网站营销型网站制作公司
  • 网站可以先做代码么怎样进行seo
  • 网站维护更新费用图片识别搜索引擎
  • 成都高端网站设计公司营销推广方案包括哪些内容
  • 做网站找哪个好如何进行推广
  • 修车店怎么做网站腾讯广告投放推广平台
  • 临朐网站建设建站首选哪家公司哪个平台可以接推广任务
  • 电商网站与大数据宁波seo排名优化哪家好
  • icp网站备案号查询百度查重免费入口
  • 万州做网站多少钱怎么理解搜索引擎优化
  • 谷歌企业邮箱注册厦门seo优化推广
  • 十大网站建设服务商百度的网址
  • 北京到安阳高铁时刻表查询滕州seo
  • 做婚庆的网站seo挂机赚钱