数据结构和算法
文章平均质量分 81
红-旺永福
我的架构师之路!!
展开
-
架构师之路--装饰模式
介绍 装饰模式也称为包装模式,是结构型设计模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案原创 2021-06-05 11:28:26 · 225 阅读 · 2 评论 -
架构师之路--适配器模式
目录介绍定义使用场景代码实现介绍 适配器模式在我们的开发中使用概率很高,从代码中随处可见的Adapter就可以判断出来,最早的ListView、GridView到现在最新的RecycleView都需要使用Adapter,并且在开发中遇到优化问题、出错概率较大的也基本出自Adapter,真是一个让人又爱又恨的角色。Adapter的目的就是将两个不兼容的类融合到一起,将不同的东西通过一种转换使得它们能够协作起来,例如,经常碰到要在两个没有关系的类型之间进行交互,第一个解决方案是修...原创 2021-02-28 23:48:25 · 314 阅读 · 4 评论 -
架构师之路--组合模式
目录介绍定义使用场景代码实现介绍 组合模式也称为整体模式,是结构型设计模式之一,它将一组相似的对象看作一个整体对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差异,生活中比较常见的就是组织结构图,比如总公司是结构的顶点,它下面包含了深圳、上海、西安、成都分公司,还是总行政部、总财务部等等部门,而深圳、上海、西安、成都分公司又包含了自己的下属部门,这样就构成一层一层的树状结构,而总行政部、总财务部和叶子节点,和深圳、...原创 2021-02-28 21:12:59 · 133 阅读 · 0 评论 -
架构师之路--代理模式
目录介绍定义使用场景代码实现介绍 代理模式也称为委托模式,是结构型设计模式之一,其重要性不言而喻,在我们平时的实际工作中也很常见,对于我们码农来说,最常接触的就是代理上网了,连上代理服务器地址,就可以轻松畅游世界;比如哪天中午开会太忙了,午饭可以找其他帮忙打包一下,他就是你的代理;如果和谁有矛盾了,需要打官司,找一个律师,这个律师就是你的代理,这些都是代理模式的实际例子。定义 为其他对象提供一种代理以控制对该对象的访问。使用场景 当无法或者不想...原创 2021-02-28 11:47:41 · 198 阅读 · 0 评论 -
架构师之路--中介者模式
目录介绍定义使用场景代码实现介绍 中介者模式也称为调解者模式,它的名字本身就有调停者和调解者的意思,在日常生活中,我们也经常碰到类似的例子,比如A和B有纠纷,双方无法达成一致,那么这时候就需要找一个中间人来评理,或者打官司,这个中间人或者法院就是中介者。或者在我们实际开发工作中,产品、运维、开发、设计、测试都会负责自己职责内的事情,如果有一个需求的修改,各方评估时都是站在自己立场上考虑问题,几方在一起争论不休,根本无法达成一致意见,这样需求修改工作就无法往下进行,这时候由项目...原创 2021-02-11 10:47:01 · 303 阅读 · 0 评论 -
架构师之路--模板方法模式
介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而变化的,例如,执行程序的流程大致如下:1、检查代码的正确性;2、链接相关的类库;3、编译相关的代码;4、执行程序。对于不同的程序设计语言,上述几个步骤的具体逻辑都是不一样的,但是,它们的执行顺序是固定的,这类问题的解决方法就是我们要讲的模板方法模式。定义 定义一个操作中的算法的框架,而将一些步骤...原创 2021-01-31 22:04:36 · 231 阅读 · 0 评论 -
架构师之路--备忘录模式
目录介绍定义使用场景代码实现介绍 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,它的实现方式需要保证被保存的对象状态不能被从外部访问,目的是为了保护好被保存的对象状态的完整性以及内部实现不向外暴露。定义 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可以将该对象恢复到原先保存的状态。使用场景 1、需要保存一个对象在某一时刻的状态或者部分状态; 2、如果用...原创 2021-01-31 21:35:00 · 167 阅读 · 1 评论 -
架构师之路--观察者模式
目录介绍定义使用场景代码实现介绍 观察者模式是一个使用率非常高的模式,它最常用的地方就是GUI系统、订阅-发布系统,因为这个模式的一个重要作用就是解耦,使得它们之间的依赖性更小,甚至作到毫无依赖,以GUI系统来说,应用的UI具有易变性,尤其是前期随着业务的改变或者产品需求的修改,应用界面也会经常发生变化,但是业务逻辑基本变化不大,此时GUI系统需要一套机制来应对这种情况,使得UI层与具体的业务逻辑解耦,观察者模式此时就派上用场了。定义 定义对象间一种一对多的依...原创 2021-01-31 21:09:13 · 427 阅读 · 0 评论 -
架构师之路--责任链模式
目录介绍定义使用场景代码实现介绍 责任链模式是行为型设计模式之一,链很形象的反映了该模式的结构,比如像我们生活中的锁链,是由一个个节点连接起来的,而且每个节点都可以被工再连接,因此,责任链模式也具有很好的灵活性。我们可以将每个节点看作一个对象,每个对象拥有自己独立的处理逻辑,从链首到链尾依次处理,直到所有节点处理完成为止。定义 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系,将这些对象链成一条链,并沿着这条链传递该请求,直到所有对象处...原创 2021-01-31 10:03:49 · 165 阅读 · 0 评论 -
架构师之路--状态模式
目录介绍定义使用场景代码实现介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为,状态模式和策略模式的结构几乎完全一样,但它们的目的、本质却完全不一样,状态模式的行为是平行的,不可替换的,策略模式的行为是彼此独立、可相互替换的,用一句来描述,状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同的抽象状态基类,状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。定义 当一个对象的内在状态改变时允许改变其行为,这个对象...原创 2021-01-24 21:18:07 · 217 阅读 · 0 评论 -
架构师之路--策略模式
介绍 在软件开发中经常遇到这样的情况:实现某一个功能可以有多种算法或者策略,我们根据实际情况可以选择不同的算法或者策略来完成该功能。例如,排序算法,可以使用插入排序、归并排序、冒泡排序等。 针对这种情况,一种常规的方法是将多种算法写在一个类中,例如,需要提供多种排序算法,可以将这些算法写到一个类中,每一个方法对应一个具体排序算法,或者通过if/else进行区分,这样明显不符合开闭原则,如果有一些功能扩展,我们只能在原始的代码基础上进行修改;也不符合单一职责原则。 如果我们...原创 2021-01-24 20:48:34 · 180 阅读 · 0 评论 -
架构师之路--工厂方法模式
目录介绍定义使用场景代码实现介绍 工厂方法模式是创建型设计模式之一,它是一种结构简单的模式,其在我们平时的开发中应用非广泛,比如Activity中各个生命周期的方法,以onCreate为例,它就可以看作是一个工厂方法,我们在其中可以构造我们的View并通过setContentView返回给framework处理。定义 定义一个用于创建对象的接口,让子类决定实例化哪个类。使用场景 在任何需要生成复杂对象的地方,都可以使用工厂方法模式,复杂对象适合...原创 2021-01-24 18:51:20 · 194 阅读 · 0 评论 -
架构师之路--原型模式
介绍 Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程,该模式是为了将构建复杂对象的过程和它的部件解耗,使得构建过程和部件的表示隔离开来。定义 将一个复杂对象的构建与它的表示分离...原创 2021-01-24 18:35:30 · 259 阅读 · 0 评论 -
架构师之路--单例模式
介绍 本节我们来看看设计模式中使用场景最多的单例模式,网上也有很多的知识,各种单例模式的写法,对于我们日常的工作,已经足够了。单例模式的类必须保证该模式的对象只有一个实例的存在,许多时候,系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为,比如在一个应用中,应该只有一个ImageLoader实例,这个ImageLoader中又含有线程池、缓存系统、网络请求,很消耗资源,因此没有理由让它构造多个对象,这种不能自由构造对象的情况,就是单例模式的使用场景。定义 确保某一个类只...原创 2021-01-17 19:42:10 · 377 阅读 · 4 评论 -
架构师之路--面向对象六大原则
前言 作为一名码农,一名有上进心、有追求的码农,我们必须不断学习,不断提升自我修养,把我们的代码向极致打造,就好像我们是一名盖房子的工匠一样,天天盖农村里的小房子,翻来覆去就是那样,什么时候我们可以指挥盖出摩天大楼?在我们完全熟练了盖小房子这样的技能之后,是不是应该向更高的要求出发,向更高的标准看齐了?我们的代码和搭积木非常相似,我们要想自己指挥盖摩天大楼,还是必须自身功夫硬,就像我们指挥盖小房子一样,我们完全熟练其中的每个细节,烂熟于胸,才敢坐上那个指挥的位置上,否则毫无头绪,我们自己对自己都...原创 2021-01-17 16:27:20 · 285 阅读 · 0 评论 -
Okhttp文件上传源码分析
okhttp文件传输的源码分析原创 2016-12-09 09:57:42 · 1366 阅读 · 0 评论 -
蓝牙文件分享源码全解析
Android bluetooth文件分享的完整过程的源码分析原创 2016-12-09 17:11:25 · 3975 阅读 · 0 评论 -
Android AOP实现原理全解析
深入理解Android之AOP原创 2016-12-25 15:15:42 · 3079 阅读 · 0 评论 -
Android Apk资源混淆流程全解析
apk资源文件混淆的流程分析原创 2016-12-30 14:01:14 · 1728 阅读 · 0 评论 -
Opengl ES系列学习--增加地形
本节我们在上一节的基础上继续添加地形图功能,我们要分析的目标就是《OpenGL ES应用开发实践指南 Android卷》书中第12章实现的最终的结果,代码下载请点击:Opengl ES Source Code,该Git库中的heightmapModule就是我们本节要分析的目标,先看下本节最终实现的结果。 可以看到,地形图中有高有低,是用绿色来表示的,最接近底部的颜...原创 2019-04-25 18:12:47 · 606 阅读 · 0 评论 -
Opengl ES系列学习--序
之前一直都想好好学习一下Opengl ES,因为自己想往图形界面处理方向集中发展,这样的目标对Opengl ES的要求也是不能少的,推荐两本书:《OpenGL ES应用开发实践指南 Android卷》和《OPENGL ES 3.0编程指南中文原书第2版》,CSDN上也有其他朋友分享的,但是都要四五十个积分,有点抠门了,另外自己把两本书的代码全部整理了下,Github下载链接:Opengl...原创 2019-04-19 11:25:58 · 549 阅读 · 3 评论 -
Opengl ES系列学习--点亮世界
本节我们在上一节的基础上继续添加光照,我们要分析的目标就是《OpenGL ES应用开发实践指南 Android卷》书中第13章实现的最终的结果,代码下载请点击:Opengl ES Source Code,该Git库中的lightingModule就是我们本节要分析的目标,先看下本节最终实现的结果。 在上一节的基础上,把天空盒换成了一个夜晚的天空盒,同时增加了光照,三个粒...原创 2019-04-29 18:17:13 · 413 阅读 · 0 评论 -
Opengl ES系列学习--用粒子增添趣味
我们本节开始分析《OpenGL ES应用开发实践指南 Android卷》书中第10章中的粒子系统的实现原理,搞清楚其中的代码逻辑,代码下载请点击:Opengl ES Source Code,该Git库中的particlesModule就是我们本节要分析的目标,先看下本节最终实现的结果。 最终运行在真机上的效果非常炫,三个红绿蓝粒子系统不断的发射新的粒子,所有粒子由于重力...原创 2019-04-19 20:20:06 · 534 阅读 · 0 评论 -
Opengl ES系列学习--增加天空盒
本节我们在上一节的基础上来分析一下天空盒的实现。我们要分析的目标就是《OpenGL ES应用开发实践指南 Android卷》书中第11章实现的最终的结果,代码下载请点击:Opengl ES Source Code,该Git库中的skyboxModule就是我们本节要分析的目标,先看下本节最终实现的结果,CSDN对GIF动画文件的大小有限制,所以只能录制三个文件来看效果。...原创 2019-04-22 18:15:50 · 1086 阅读 · 0 评论 -
Opengl ES系列学习--创建动态壁纸
本节我们在上一节的基础上继续完成动态壁纸功能,我们要分析的目标就是《OpenGL ES应用开发实践指南 Android卷》书中第14章实现的最终的结果,代码下载请点击:Opengl ES Source Code,该Git库中的livewallpaperModule就是我们本节要分析的目标,先看下本节最终实现的结果。 最终的效果,就是把我们上一节实现的结果作为...原创 2019-04-30 10:59:57 · 765 阅读 · 2 评论 -
Opengl ES系列学习--顶点着色器
本节我们继续来看一下《OPENGL ES 3.0编程指南 原书第2版(中文版)》书中第8章的内容,PDF下载地址:OPENGL ES 3.0编程指南 原书第2版(中文版),代码下载地址:Opengl ES Source Code。该书中好像没有对Demo的代码进行讲解,全书的重点全部都集中在Opengl ES本身,而实现出来的实例代码讲解的很少,作为初学者,理解起来确实比较费劲,这也是我...原创 2019-05-07 14:57:15 · 741 阅读 · 0 评论 -
目录树结构的数据库设计思考
昨天一同事遇到一问题,找我帮忙解决一下,自己对问题的一些思考原创 2016-10-28 13:17:02 · 12492 阅读 · 3 评论