<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[DaltSoftware的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/DaltSoftware</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; DaltSoftware]]></copyright><item><title><![CDATA[RecyclerView自定义行个数]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/90048441</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/90048441</guid><author>DaltSoftware</author><pubDate>Thu, 09 May 2019 21:34:08 +0800</pubDate><description><![CDATA[在某些需求下，会出现在一个ReyclerView列表中，各行的元素个数不相等，此时可以使用两种方式解决问题。
使用StaggeredGridLayoutManager和StaggeredGridLayoutManager.LayoutParams中的setFullSpan方法，可以设置某个元素单独占据一行，其他元素照常排列。但是这种方式缺点只能应对一个元素占据一行的情景。
比如，常规是一行三个it...]]></description><category></category></item><item><title><![CDATA[设计模式——桥接模式]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/81182216</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/81182216</guid><author>DaltSoftware</author><pubDate>Tue, 24 Jul 2018 11:53:12 +0800</pubDate><description><![CDATA[定义

桥接（Bridge）是用于把抽象化与实现化解耦，使得二者可以独立变化。这种类型的设计模式属于结构型模式，它通过提供抽象化和实现化之间的桥接结构，来实现二者的解耦。

这种模式涉及到一个作为桥接的接口，使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。



介绍

意图：将抽象部分与实现部分分离，使它们都可以独立的变化。

主要解决：在有多种可能会变化的情况下，用继...]]></description><category></category></item><item><title><![CDATA[精致自绘渐变进度条-Path/Paint.setXfermode]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/80505697</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/80505697</guid><author>DaltSoftware</author><pubDate>Wed, 30 May 2018 09:54:20 +0800</pubDate><description><![CDATA[日常产品需求开发中进度条自绘是经常需要的，如下：





思路



1，如图1，绘制左端半圆部分

通过canvas.drawArc即可



2，如图2，绘制左半圆和中间矩形部分

通过canvas.drawArc和canvas.drawRect即可



3，如图3和图4，绘制右半圆部分

绘制左半圆-&amp;amp;gt;绘制矩形-&amp;amp;gt;绘制右半圆部分（通过Path取得BEFC封闭区域部分如图4，或...]]></description><category></category></item><item><title><![CDATA[Java(Android)注解]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/80362514</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/80362514</guid><author>DaltSoftware</author><pubDate>Fri, 18 May 2018 11:59:08 +0800</pubDate><description><![CDATA[概述

注解(Annotation)在JDK1.5之后增加的一个新特性，注解的引入意义很大，有很多非常有名的框架，比如Hibernate、Spring，Android新推出的AAC/Room等框架中都大量使用注解。注解作为程序的元数据嵌入到程序。注解可以被解析工具或编译工具解析，此处注意注解不同于注释(comment)。

当一个接口直接继承java.lang.annotation.Annotat...]]></description><category></category></item><item><title><![CDATA[初探RxJava2Android]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/80362492</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/80362492</guid><author>DaltSoftware</author><pubDate>Fri, 18 May 2018 11:57:01 +0800</pubDate><description><![CDATA[源码

RxJava: https://github.com/ReactiveX/RxJava

RxAndroid:   https://github.com/ReactiveX/RxAndroid



配置



    compile 'io.reactivex.rxjava2:rxjava:2.1.12'
    compile 'io.reactivex.rxjava2:rxandro...]]></description><category></category></item><item><title><![CDATA[Android AAC架构]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/80362249</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/80362249</guid><author>DaltSoftware</author><pubDate>Fri, 18 May 2018 11:39:13 +0800</pubDate><description><![CDATA[定义

Android Architecture Components,简称 AAC,一个处理UI的生命周期与数据的持久化的架构



AAC 的核心

Lifecycle, LiveData, ViewModel 以及 Room


通过它可以非常优雅的让数据与界面交互
并做一些持久化的东西
高度解耦
自动管理生命周期
而且不用担心内存泄漏的问题.


架构图如下：





LifeCycle...]]></description><category></category></item><item><title><![CDATA[ConstrainLayout初探]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/80362227</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/80362227</guid><author>DaltSoftware</author><pubDate>Fri, 18 May 2018 11:38:05 +0800</pubDate><description><![CDATA[概述

ConstraintLayout, 即约束布局, 在2016年由Google I/O推出. 从支持力度而言, 将成为主流布局样式, 完全代替其他布局, 减少布局的层级, 优化渲染性能. 在新版Android Studio中, ConstraintLayout已替代RelativeLayout, 成为HelloWorld项目的默认布局. ConstraintLayout作为非绑定(Unbun...]]></description><category></category></item><item><title><![CDATA[Java8-Lambda表达式（函数式编程）]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79392555</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79392555</guid><author>DaltSoftware</author><pubDate>Tue, 27 Feb 2018 19:51:16 +0800</pubDate><description><![CDATA[引言课本上说编程有两种模式，面向过程的编程以及面向对象的编程，其实在面向对象编程之前还出现了面向函数的编程(函数式编程)，以前一直被忽略、不被重视，现在从学术界已经走向了商业界，对函数编程语言的支持目前有Scala、Erlang、F#、Python、Php、Java、Javascript等，有人说他将会是编程语言中的下一个主流…函数式接口函数式接口(Functional Interface)是Jav]]></description><category></category></item><item><title><![CDATA[设计模式——享元模式]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79290836</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79290836</guid><author>DaltSoftware</author><pubDate>Thu, 08 Feb 2018 16:07:58 +0800</pubDate><description><![CDATA[享元模式



模式定义

享元模式(Flyweight Pattern)：运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象，而这些对象都很相似，状态变化很小，可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象，因此它又称为轻量级模式，它是一种对象结构型模式。



模式结构

享元模式包含如下角色：


Flyweight: 抽象享元类
ConcreteFly...]]></description><category></category></item><item><title><![CDATA[设计模式——单例模式]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79270489</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79270489</guid><author>DaltSoftware</author><pubDate>Tue, 06 Feb 2018 14:45:15 +0800</pubDate><description><![CDATA[单例模式单例模式的几种实现方式单例模式的实现有多种方式，如下所示：1、懒汉式，线程不安全是否 Lazy 初始化：是是否多线程安全：否实现难度：易描述：这种方式是最基本的实现方式，这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized，所以严格意义上它并不算单例模式。 
这种方式 lazy loading 很明显，不要求线程安全，在多线程不能正常工作。代码实例：public cla]]></description><category></category></item><item><title><![CDATA[设计模式——策略模式]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79270444</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79270444</guid><author>DaltSoftware</author><pubDate>Tue, 06 Feb 2018 14:41:55 +0800</pubDate><description><![CDATA[策略模式定义策略模式(Strategy Pattern)：定义一系列算法，将每一个算法封装起来，并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化，也称为政策模式(Policy)。策略模式是一种对象行为型模式。模式的结构封装类(Context)：也叫上下文，对策略进行二次封装，目的是避免高层模块对策略的直接调用。抽象策略：通常情况下为一个接口，当各个实现类中存在着重复的逻辑时，则使用抽象类]]></description><category></category></item><item><title><![CDATA[设计模式——状态模式]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79263878</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79263878</guid><author>DaltSoftware</author><pubDate>Mon, 05 Feb 2018 20:11:53 +0800</pubDate><description><![CDATA[状态模式定义状态模式(State Pattern) ：允许一个对象在其内部状态改变时改变它的行为，对象看起来似乎修改了它的类。其别名为状态对象(Objects for States)，状态模式是一种对象行为型模式。模式结构状态模式包含如下角色：Context: 环境类State: 抽象状态类ConcreteState: 具体状态类模式分析状态模式描述了对象状态的变化以及对象如何在每一种状态下表现出不]]></description><category></category></item><item><title><![CDATA[六大原则（4）——接口隔离原则]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229887</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229887</guid><author>DaltSoftware</author><pubDate>Thu, 01 Feb 2018 16:11:09 +0800</pubDate><description><![CDATA[接口隔离原则定义客户端不应该依赖它不需要的接口；一个类对另一个类的依赖应该建立在最小的接口上。问题由来：类A通过接口I依赖类B，类C通过接口I依赖类D，如果接口I对于类A和类B来说不是最小接口，则类B和类D必须去实现他们不需要的方法。解决方案：将臃肿的接口I拆分为独立的几个接口，类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。未遵循接口隔离的如下：遵循接口隔离原则：举例互联网公司]]></description><category></category></item><item><title><![CDATA[六大原则（6）——开闭原则]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229201</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229201</guid><author>DaltSoftware</author><pubDate>Thu, 01 Feb 2018 15:32:40 +0800</pubDate><description><![CDATA[开闭原则概述定义一个软件实体如类、模块和函数应该对扩展开放，对修改关闭。问题由来在软件的生命周期内，因为变化、升级和维护等原因需要对软件原有代码进行修改时，可能会给旧代码中引入错误，也可能会使我们不得不对整个功能进行重构，并且需要原有代码经过重新测试。解决方案当软件需要变化时，尽量通过扩展软件实体的行为来实现变化，而不是通过修改已有的代码来实现变化。核心用抽象构建框架，用实现扩展细节。因为抽象灵活性]]></description><category></category></item><item><title><![CDATA[六大原则（5）——迪米特法则]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229187</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229187</guid><author>DaltSoftware</author><pubDate>Thu, 01 Feb 2018 15:32:06 +0800</pubDate><description><![CDATA[迪米特法则概述定义一个对象应该对其他对象保持最少的了解。问题由来类与类之间的关系越密切，耦合度越大，当一个类发生改变时，对另一个类的影响也越大。解决方案尽量降低类与类之间的耦合。迪米特法则又叫最少知道原则。通俗的来讲，就是一个类对自己依赖的类知道的越少越好。也就是说，对于被依赖的类来说，无论逻辑多么复杂，都尽量地的将逻辑封装在类的内部，对外除了提供的public方法，不对外泄漏任何信息。迪米特法则还]]></description><category></category></item><item><title><![CDATA[六大原则（3）——依赖倒置原则]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229167</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229167</guid><author>DaltSoftware</author><pubDate>Thu, 01 Feb 2018 15:30:45 +0800</pubDate><description><![CDATA[依赖倒置原则概述定义高层模块（即客户端/调用者）不应该依赖低层模块，二者都应该依赖其抽象；抽象不应该依赖细节；细节应该依赖抽象。 
简而言之：面向接口编程问题由来类A直接依赖类B，假如要将类A改为依赖类C，则必须通过修改类A的代码来达成。这种场景下，类A一般是高层模块，负责复杂的业务逻辑；类B和类C是低层模块，负责基本的原子操作；假如修改类A，会给程序带来不必要的风险。解决方案将类A修改为依赖接口I]]></description><category></category></item><item><title><![CDATA[六大原则（2）——里氏替换原则]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229156</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229156</guid><author>DaltSoftware</author><pubDate>Thu, 01 Feb 2018 15:29:53 +0800</pubDate><description><![CDATA[里氏替换原则概述定义严格的定义：如果对每一个类型为T1的对象o1，都有类型为T2的对象o2，使得以T1定义的所有程序P在所有的对象o1都换成o2时，程序P的行为没有变化，那么类型T2是类型T1的子类型。 通俗的定义：所有引用基类的地方必须能透明地使用其子类的对象。更通俗的定义：子类可以扩展父类的功能，但不能改变父类原有的功能（一方面指不改变父类原功能的逻辑，另外一方面也指不改变该方法的含义）。对于基]]></description><category></category></item><item><title><![CDATA[六大原则（1）——单一职责原则]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229139</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79229139</guid><author>DaltSoftware</author><pubDate>Thu, 01 Feb 2018 15:28:21 +0800</pubDate><description><![CDATA[单一职责



定义

不要存在多于一个导致类变更的原因。通俗的说，即一个类只负责一项职责。 



问题由来

类T负责两个不同的职责：职责P1，职责P2。当由于职责P1需求发生改变而需要修改类T时，有可能会导致原本运行正常的职责P2功能发生故障。



解决方案

遵循单一职责原则。分别建立两个类T1、T2，使T1完成职责P1功能，T2完成职责P2功能。这样，当修改类T1时，不会使职责P2发生]]></description><category></category></item><item><title><![CDATA[设计模式——组合模式]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79199724</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79199724</guid><author>DaltSoftware</author><pubDate>Mon, 29 Jan 2018 20:51:38 +0800</pubDate><description><![CDATA[组合模式定义：组合模式（Composite Pattern）将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以使用一致的方法操作单个对象和组合对象。 
UML图：（1）Component：抽象根节点，为组合中的对象声明接口。在适当的情况下，实现所有类共有接口的缺省行为。声明一个接口用于访问和管理Component的子节点。可在递归结构中定义一个接口，用于访问一个父节点，并在合适]]></description><category></category></item><item><title><![CDATA[设计模式——迭代器模式]]></title><link>https://blog.youkuaiyun.com/DaltSoftware/article/details/79175393</link><guid>https://blog.youkuaiyun.com/DaltSoftware/article/details/79175393</guid><author>DaltSoftware</author><pubDate>Fri, 26 Jan 2018 18:05:39 +0800</pubDate><description><![CDATA[迭代器模式定义：提供一种方法访问一个容器对象中各个元素，而又不暴露该对象的内部细节。 
Java中使用最多的一种模式，答案不是单例模式，也不是工厂模式，更不是策略模式，而是迭代器模式题外话学习这个设计模式之后才知道以前写了很多很“辣鸡”的代码，可能有些小伙伴也这样写过代码。下面我就说说我刚提到的“超辣鸡”的代码的一个例子。希望自己，也希望每一个小伙伴都不要再犯这种错误。需求：图书馆有一些语文文学书。]]></description><category></category></item></channel></rss>