白云苍狗日悠悠
码龄8年
关注
提问 私信
  • 博客:117,626
    117,626
    总访问量
  • 38
    原创
  • 2,230,154
    排名
  • 64
    粉丝
  • 0
    铁粉

个人简介:Android 开发者

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2017-05-08
博客简介:

DaltSoftware的博客

查看详细资料
个人成就
  • 获得40次点赞
  • 内容获得50次评论
  • 获得95次收藏
  • 代码片获得425次分享
创作历程
  • 1篇
    2019年
  • 24篇
    2018年
  • 13篇
    2017年
成就勋章
TA的专栏
  • android-实用技巧
    12篇
  • 设计模式
    13篇
  • 6大原则
    7篇
  • Java
    2篇
创作活动更多

2024 博客之星年度评选报名已开启

博主的专属年度盛宴,一年仅有一次!MAC mini、大疆无人机、华为手表等精美奖品等你来拿!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

RecyclerView自定义行个数

在某些需求下,会出现在一个ReyclerView列表中,各行的元素个数不相等,此时可以使用两种方式解决问题。使用StaggeredGridLayoutManager和StaggeredGridLayoutManager.LayoutParams中的setFullSpan方法,可以设置某个元素单独占据一行,其他元素照常排列。但是这种方式缺点只能应对一个元素占据一行的情景。比如,常规是一行三个it...
原创
发布博客 2019.05.09 ·
7983 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

设计模式——桥接模式

定义桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。介绍意图:将抽象部分与实现部分分离,使它们都可以独立的变化。主要解决:在有多种可能会变化的情况下,用继...
原创
发布博客 2018.07.24 ·
388 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

精致自绘渐变进度条-Path/Paint.setXfermode

日常产品需求开发中进度条自绘是经常需要的,如下:思路1,如图1,绘制左端半圆部分通过canvas.drawArc即可2,如图2,绘制左半圆和中间矩形部分通过canvas.drawArc和canvas.drawRect即可3,如图3和图4,绘制右半圆部分绘制左半圆->绘制矩形->绘制右半圆部分(通过Path取得BEFC封闭区域部分如图4,或...
原创
发布博客 2018.05.30 ·
744 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Java(Android)注解

概述注解(Annotation)在JDK1.5之后增加的一个新特性,注解的引入意义很大,有很多非常有名的框架,比如Hibernate、Spring,Android新推出的AAC/Room等框架中都大量使用注解。注解作为程序的元数据嵌入到程序。注解可以被解析工具或编译工具解析,此处注意注解不同于注释(comment)。当一个接口直接继承java.lang.annotation.Annotat...
原创
发布博客 2018.05.18 ·
368 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

初探RxJava2Android

源码RxJava: https://github.com/ReactiveX/RxJavaRxAndroid: https://github.com/ReactiveX/RxAndroid配置 compile 'io.reactivex.rxjava2:rxjava:2.1.12' compile 'io.reactivex.rxjava2:rxandro...
原创
发布博客 2018.05.18 ·
278 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Android AAC架构

定义Android Architecture Components,简称 AAC,一个处理UI的生命周期与数据的持久化的架构AAC 的核心Lifecycle, LiveData, ViewModel 以及 Room通过它可以非常优雅的让数据与界面交互并做一些持久化的东西高度解耦自动管理生命周期而且不用担心内存泄漏的问题.架构图如下:LifeCycle...
原创
发布博客 2018.05.18 ·
8924 阅读 ·
0 点赞 ·
2 评论 ·
9 收藏

ConstrainLayout初探

概述ConstraintLayout, 即约束布局, 在2016年由Google I/O推出. 从支持力度而言, 将成为主流布局样式, 完全代替其他布局, 减少布局的层级, 优化渲染性能. 在新版Android Studio中, ConstraintLayout已替代RelativeLayout, 成为HelloWorld项目的默认布局. ConstraintLayout作为非绑定(Unbun...
原创
发布博客 2018.05.18 ·
1005 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java8-Lambda表达式(函数式编程)

引言课本上说编程有两种模式,面向过程的编程以及面向对象的编程,其实在面向对象编程之前还出现了面向函数的编程(函数式编程),以前一直被忽略、不被重视,现在从学术界已经走向了商业界,对函数编程语言的支持目前有Scala、Erlang、F#、Python、Php、Java、Javascript等,有人说他将会是编程语言中的下一个主流…函数式接口函数式接口(Functional Interface)是Jav
原创
发布博客 2018.02.27 ·
375 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

设计模式——享元模式

享元模式模式定义享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。模式结构享元模式包含如下角色:Flyweight: 抽象享元类ConcreteFly...
原创
发布博客 2018.02.08 ·
309 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

设计模式——单例模式

单例模式单例模式的几种实现方式单例模式的实现有多种方式,如下所示:1、懒汉式,线程不安全是否 Lazy 初始化:是是否多线程安全:否实现难度:易描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。 这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。代码实例:public cla
原创
发布博客 2018.02.06 ·
264 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式——策略模式

策略模式定义策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。模式的结构封装类(Context):也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。抽象策略:通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类
原创
发布博客 2018.02.06 ·
315 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

设计模式——状态模式

状态模式定义状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。模式结构状态模式包含如下角色:Context: 环境类State: 抽象状态类ConcreteState: 具体状态类模式分析状态模式描述了对象状态的变化以及对象如何在每一种状态下表现出不
原创
发布博客 2018.02.05 ·
458 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

六大原则(4)——接口隔离原则

接口隔离原则定义客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。未遵循接口隔离的如下:遵循接口隔离原则:举例互联网公司
原创
发布博客 2018.02.01 ·
524 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

六大原则(6)——开闭原则

开闭原则概述定义一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。问题由来在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。解决方案当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。核心用抽象构建框架,用实现扩展细节。因为抽象灵活性
原创
发布博客 2018.02.01 ·
383 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

六大原则(5)——迪米特法则

迪米特法则概述定义一个对象应该对其他对象保持最少的了解。问题由来类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案尽量降低类与类之间的耦合。迪米特法则又叫最少知道原则。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。迪米特法则还
原创
发布博客 2018.02.01 ·
670 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

六大原则(3)——依赖倒置原则

依赖倒置原则概述定义高层模块(即客户端/调用者)不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 简而言之:面向接口编程问题由来类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。解决方案将类A修改为依赖接口I
原创
发布博客 2018.02.01 ·
422 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

六大原则(2)——里氏替换原则

里氏替换原则概述定义严格的定义:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。 通俗的定义:所有引用基类的地方必须能透明地使用其子类的对象。更通俗的定义:子类可以扩展父类的功能,但不能改变父类原有的功能(一方面指不改变父类原功能的逻辑,另外一方面也指不改变该方法的含义)。对于基
原创
发布博客 2018.02.01 ·
597 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

六大原则(1)——单一职责原则

单一职责定义不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生
原创
发布博客 2018.02.01 ·
591 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

设计模式——组合模式

组合模式定义:组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以使用一致的方法操作单个对象和组合对象。 UML图:(1)Component:抽象根节点,为组合中的对象声明接口。在适当的情况下,实现所有类共有接口的缺省行为。声明一个接口用于访问和管理Component的子节点。可在递归结构中定义一个接口,用于访问一个父节点,并在合适
原创
发布博客 2018.01.29 ·
581 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

设计模式——迭代器模式

迭代器模式定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。 Java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式题外话学习这个设计模式之后才知道以前写了很多很“辣鸡”的代码,可能有些小伙伴也这样写过代码。下面我就说说我刚提到的“超辣鸡”的代码的一个例子。希望自己,也希望每一个小伙伴都不要再犯这种错误。需求:图书馆有一些语文文学书。
原创
发布博客 2018.01.26 ·
311 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏
加载更多