Android常用8种设计模式(三)

【安卓架构师】【高焕堂】【android从程序员到架构师】从零开始进阶安卓架构师 从第一次写出Hello World,到成为一个优秀的工程师的距离有多远? android从程序员到架构师之路课程,遵循敏捷的迭代过程,从思想、方法、模式、范例和成功案例各种不同角度,带你学习从设计到代码的途径。让你在活泼的过程中,轻松地从原本的代码世界,迅速熟悉设计的新天地。 学习目录 1.复习基本OOP知识a 2.复习基本OOP知识b 3.复习基本OOP知识c 20:00 阅读详情

// … …

public View getDropDownView(int position, View convertView, ViewGroup parent) {

return getView(position, convertView, parent);

}

public boolean isEmpty() {

return getCount() == 0;

}

}

ArrayAdapter对List进行封装成ListAdapter的实现,满足ListView的调用:

public class ArrayAdapter extends BaseAdapter implements Filterable {

private List mObjects;

//我只列出这一个构造函数,大家懂这个意思就行

public ArrayAdapter(Context context, int textViewResourceId, T[] objects) {

init(context, textViewResourceId, 0, Arrays.asList(objects));

}

private void init(Context context, int resource, int textViewResourceId, List objects) {

mContext = context;

mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

mResource = mDropDownResource = resource;

mObjects = objects; //引用对象,也是表达了组合优于继承的意思

mFieldId = textViewResourceId;

}

public int getCount() {

return mObjects.size();

}

public T getItem(int position) {

return mObjects.get(position);

}

public View getView(int position, View convertView, ViewGroup parent) {

return createViewFromResource(position, convertView, parent, mResource);

}

// … …

}

我们就如此成功的把List作为数据源以ListView想要的目标接口的样子传给了ListView,同理CursorAdapter也是一模一样的道理,就不写具体代码了。

适配器本身倒是不难,但是提供了解决不兼容问题的惯用模式。

关于什么时候使用适配器模式,大概有三种情况:

(1). 你想使用一个已经存在的类,而它的接口不符合你的需求,这个在处理旧系统时比较常见。

(2). 你想创建一个可以复用的类,该类可以和其他不相关的类或不可预见的累协同工作,这就是我们android开发者经常碰到的情况:我们常常自定义一个新的Adapter。

(3). 你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配他们的接口,对象适配器可以适配他的父类接口。

3.效果

1. 结构性模式

2. 上面论述的主要是对象适配器,关于类适配器除了实现目标端口外,还要实现你要兼容的源类,

这样可以少写几行代码,但是从组合优于继承的角度看,它总则没有那么的干净。

3. 对同一个适配器(即同一个对象)对同样的源进行双向甚至多向的适配,则能使其适用两个甚至多个客户调用。

Android中对组合(合成)模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用。在android UI设计,几乎所有的widget和布局类都依靠这两个类。

组合模式,Composite Pattern,是一个非常巧妙的模式。几乎所有的面向对象系统都应用到了组合模式。

1.意图

将对象View和ViewGroup组合成树形结构以表示"部分-整体"的层次结构(View可以做为ViewGroup的一部分)。

组合模式使得用户对单个对象View和组合对象ViewGroup的使用具有一致性。

热点词汇: 部分-整体 容器-内容 树形结构 一致性 叶子 合成 安全性 透明性

2.结构

针对View和ViewGroup的实际情况,我们选择安全式的组合模式(在组合对象中添加add,remove,getChild方法),添加少许的注释,我们把上图修改为:

3.代码

View类的实现:

​public class View{

//… …

//省略了无关的方法

}

public abstract class ViewGroup extends View{

/**

  • Adds a child view.

*/

public void addView(View child) {

//…

}

public void removeView(View view) {

//…

}

/**

  • Returns the view at the specified position in the group.

*/

public View getChildAt(int index) {

try {

return mChildren[index];

} catch (IndexOutOfBoundsException ex) {

return null;

}

}

//other methods

}

ViewGroup的实现:

4.效果

(1).结构型模式

(2).定义了包含基本对象和组合对象的类层次结构。这种结构能够灵活控制基本对象与组合对象的使用。

(3).简化客户代码。基本对象和组合对象有一致性,用户不用区分它们。

学习交流

群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!

【运筹优化】VRPTW建模实战:Python+Gurobi求解带时间窗的车辆路径规划 本文详细介绍了如何使用Python和Gurobi求解带时间窗的车辆路径问题(VRPTW)。通过将物流调度难题抽象为混合整数规划模型,并逐步讲解建模、编码与求解过程,为读者提供了从理论到实践的完整指南,帮助解决物流配送中的路径优化挑战。 阅读详情

相关推荐

Ubuntu22.04 网络图标消失与连接故障排查指南(附实战修复流程)

本文详细介绍了Ubuntu22.04系统中网络图标消失与连接故障的排查与修复方法。通过ifconfig、dhclient等命令诊断问题,提供从紧急恢复网络连接到深度排查的完整解决方案,帮助用户快速恢复网络功能并预防类似问题再次发生。

weixin_28481133的博客 287

最全Android常用8种设计模式(三),2024年最新字节跳动历年校招Android面试真题解析

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。//我只列出这一个构造函数,大家懂这个意思就行。

2401_84123077的博客 1107

手把手用ROS实现Ego-Planner动态避障:无人机撞树问题终结方案

本文详细介绍了如何在ROS和Gazebo仿真环境中,通过配置和调优Ego-Planner算法,实现无人机的动态避障功能。文章深入解析了其基于局部梯度优化的核心思想,提供了从环境搭建、参数详解到代码集成的完整实践指南,并分享了实战排错经验,旨在彻底解决无人机在复杂动态场景中的碰撞问题。

weixin_29031161的博客 1631

Android中常用的设计模式

一:参考文档先介绍参考文档(或许我们更容易明白):另记录本人可参考 QQ15 MobileSafe 两个Demo有哪些在实际 Android 项目中用到的设计模式?Android开发中常见的设计模式Android中常见的设计模式Android设计模式之23种设计模式一览Android中常用设计模式二:然后总结一下其总结内容多根据参考文献文档而来,还请了解文档内容(一)什么是设计模式1. 基本定义:...

豆子的博客 1万+

解决 `version ‘GLIBCXX_3.4.32‘ not found‘ not found` 错误

解决 `version 'GLIBCXX_3.4.32' not found' not found` 错误

engchina的专栏 5677

10X Visium空间转录组学入门:从芯片结构到数据分析全流程解析(附避坑指南)

本文全面解析10X Visium空间转录组学技术,从芯片物理结构、探针化学原理到湿实验全流程操作与避坑指南,并详细介绍了从FASTQ数据到空间可视化的核心分析流程。文章旨在帮助科研人员跨越从理论到实操的鸿沟,掌握从样本准备、文库构建到使用Space Ranger和Seurat进行数据分析与可视化的完整路径,为组织生物学研究提供清晰的实践指引。

weixin_29306011的博客 163

安卓设计模式应用总结

####1.建造者模式建造者模式顾名思义,类似一个大楼都是按照一砖一瓦建造完成, 他通常结合链式调用一起使用该模式Android 比较热门的第三方框架均有使用举例:Rxjava, Retrofit, Okhttp, Geendao, 等等#####2.观察者模式观察者模式是一种行为模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

weixin_38504171的博客 1557

Halcon窗体开发避坑指南:C#自定义控件实现7大图像交互功能

本文详细介绍了如何利用C#封装自定义Halcon控件,以解决原生HWindowControl功能不足的问题。通过实战代码,展示了如何实现图像按比例显示、鼠标拖动缩放、灰度值读取、图像保存、截图及图形叠加等七大核心交互功能,并重点剖析了内存管理、坐标转换等开发避坑要点,帮助开发者构建稳定可复用的机器视觉组件库。

weixin_29251131的博客 292

Android常用8种设计模式(一)

先抽象的产品类,抽象的工厂类,然后用客户端具体的工厂生产相应的具体的产品,但是客户端并不知道具体的产品是怎么生产的,生产的过程封装在工厂里。所以说,某种程度上,工厂方法模式改变了我们直接用new创建对象的方式,一个很好的开始,意义重大。工厂模式:生产固定的一些东西,如抽象类,缺点是产品修改麻烦,如喜欢动画片和爱情片的人分别向服务器发出同一个请求,就可以得到他们想看的影片集,相当于不同对象进行同一请求,需求均得到满足。类似这种线程安全的单例,跨进程的单例,参数化的单例等等的情况,确实超出本文的范围,而且都。

2501_90401772的博客 984

ICCompiler II实战:从NDM生成到APR流程的完整避坑指南

本文是一份针对ICCompiler II(ICC II)后端物理实现流程的实战避坑指南。文章详细解析了从NDM库生成、设计初始化、布局规划到时钟树综合与布线的完整APR流程,重点分享了各环节的常见陷阱、精细化配置命令与调试经验,旨在帮助工程师高效达成PPA目标,确保设计一次成功。

p4q5r6s7t的博客 533

如何实现Docker镜像导入导出 ?

摘要: Docker镜像迁移与备份可通过两种方式实现:1)镜像操作(save/load)完整保存分层结构和元数据,适用于完整备份;2)容器操作(export/import)仅保存文件系统快照,适合创建轻量模板。关键区别在于前者保留历史记录和分层,后者生成单层镜像。save/load命令示例:docker save -o nginx.tar nginx:latest,export/import示例:docker export -o container.tar abc123 && docker

weixin_39291964的博客 875

Android常用8种设计模式(二)

/命令模式这里不需要继承Runnable接口,但是这里考虑到实际情况,比如方便性等,继承了Runnable接口,实现了run方法,这个是Thread自身的运行run的方法。android中对我印象最深的就是多线程多进程的环境,所以必然大量使用到Runbable,Thread,其实用的就是最简单的命令模式。将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。命令模式,Command Pattern,把请求封装为一个对象,多么巧妙的一个说法啊。

2501_90392055的博客 800

【NI Multisim 14.0编辑环境——项目管理器】

主窗口包括标题栏、菜单栏、工具栏、工作区域、电子表格视图(信息窗口)、状态栏及项目管理器7个部分。 上期我们了解了工具栏,今天我们继续了解项目管理器。 一、项目管理器 在原理图设计中经常用到的工作面板有“设计工具箱”面板、“SPICE网表查看器”面板及“LabVIEW 协同仿真终端”面板。 1.“设计工具箱”面板 基本位于工作界面左侧,主要用于层次电路的显示。启动软件,默认创建的“设计1”以分层的形式显示出来。 那么如何打开“设计工具箱”面板呢?如图所示:在该面板中显示 SPICE 网表的输入,输出

RL2698853114的博客 2036

8种常用的android设计模式

一般来说,常用的android设计模式有以下8种:单例、工厂、观察者、代理、命令、适配器、合成、访问者。     单例模式:目的是为了让系统中只有一个调用对象,缺点是单例使其他程序过分依赖它,而且不同单例运行在不同进程中,使得维护困难;     工厂模式:生产固定的一些东西,如抽象类,缺点是产品修改麻烦;如喜欢动作片和爱情片的人分别向服务器发出同一个请求,就可以得到他们想看的影片集,相当于

明潮的BLOG 4185

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android开发 安卓中常用设计模式总结

安卓开发当中用到了各种各样的java设计模式,在此对其做以总结,一方面这是面试常考问题;另一方面,通过不断总结,也可以增强这方面的意识,知其然并知其所以然,方便日后灵活运用。     1,适配器模式      ListView、GridView、RecycleView等。     不同的数据提供者使用同一个适配器来向同一个客户提供服务。     2,建造者模式     AlertDial

到此一游 909

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

androidstudio简易app实例,android开发常用的设计模式

其实客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。(以下体系的复习资料是我从各路大佬收集整理好的)《Android开发七大模块核心知识笔记》《960全网最全Android开发笔记》《379页Android开发面试宝典》历时半年,我们整理了这份市面上最全面的安卓面试题解析大全包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。

2401_84408437的博客 1129

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android Visualizer 实战:把声音画出来

是系统提供的音频效果(AudioEffect)之一。它挂在音频链路上,,把数据回吐给你——画波形、画频谱、做响度表。

Android的专栏 275
上一篇: Android学习必备---大神呕心沥血之作,巨详细巨简洁,一看就懂一学就会!
下一篇: Android开发 ListView(垂直滚动列表项视图)的简单使用
普通网友
博客等级 码龄3年 3184粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值