程序亦非猿

Build Better Apps.

桥接模式

设计模式专题系列: 设计模式 桥接模式桥接模式通过 将实现和抽象放在两个不同的类层次中而使它们可以独立改变。 使用桥接模式不只改变你的实现,也改变你的抽象。 上code: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556......

模板方法模式

设计模式专题系列: 设计模式 模板方法模式模板方法模式: 在一个方法中定义一个算法的估价,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变方法结构的情况下,重新定义算法的某些步骤。 具体来说: 创建一个算法的模板,这个模板其实就是第一个方法(需要定义为final)。而这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这样可以确保算法结构保持不变,同时......

状态模式

设计模式专题系列: 设计模式 状态模式状态模式: 允许对象在内部状态改变时改变它的行为,对象看起来好像修改它的类。 状态模式把每个状态都独立成类,并将动作委托到代表当前状态的对象。 Context需要持有 所有状态的一个实例(弹性的代价),通过不同状态来切换状态对象,把行为委托给当前状态的对象,客户端不知道Context内部的状态,跟策略模式不同,策略模式需要客户端去指定策略,......

代理模式

设计模式专题系列: 设计模式 代理模式 这一章节的内容较多,笔记比较乱,还是看书好些。 代理模式: 为另一个对象提供一个替身或占位符以控制对这个对象的访问。 所谓代理(proxy),就是代表某个真实的对象。 代理要做的就是:控制和管理访问(控制对象访问) why? 是因为Client不知道如何和远程对象沟通。从某方面来看,远程代理控制访问,可以帮忙处理一些细节(比如网络,I......

观察者模式

设计模式专题系列: 设计模式 观察者模式观察者模式:定义了对象之间的一对多依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会受到通知,并自动更新。 出版者(Subject) + 订阅者(Observer) = 观察者模式 观察者依赖于主题。 观察者模式提供了一种对象设计,让主题和观察者之间松耦合。 观察者与主题之间依赖于接口,主题不需要知道观察者的具体实现 可......

迭代器模式

设计模式专题系列: 设计模式 迭代器模式迭代器模式(Iterator): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 迭代器模式服务『集合』,为了更好地管理集合。 所谓集合(Collection)就是是,一群对象,可以放在数组、堆栈、列表、散列表等。集合有时候也被称为『聚合』(aggregate)。 迭代器的意义与优势 我们不需要知道一个集合到底是数......

工厂模式

设计模式专题系列: 设计模式 工厂模式工厂模式分两种模式: 工厂方法 抽象工厂 简单工厂使用new Xxx()创建对象非常脆弱,缺乏弹性,耦合度高。 当具体类需要新增或删除的时候,就必须修改这段代码,非常容易出错,难以维护和更新。 所以需要把创建对象的方法封装起来,用“工厂”来负责创建对象。 定义Factory: 使用: 看起来可能只是把代码挪到了另外一个地方......

外观模式

设计模式专题系列: 设计模式 外观模式(Facade)外观模式: 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 或者说:将一个类或数个类的复杂的一切都隐藏在背后,只显露出一个感觉美好的外观。 外观模式创建一个接口简化而统一的类,用来包装子系统中的一个或者多个复杂的类,而暴露给客户端的是非常简单的接口,让 客户端和子系统解耦。 ......

装饰者模式

设计模式专题系列: 设计模式 装饰者模式装饰者模式: 动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 装饰者模式可以给类 动态地添加功能,而不需要修改已经存在的类,类似一个Wrapper。 装饰者有弹性,非常符合 开闭原则 特点 装饰者和被装饰者对象拥有相同的超类型 你可以用一个或多个装饰者包装一个对象 既然装饰者和被装饰者对象拥有相......

复合模式

设计模式专题系列: 设计模式 复合模式复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。 复合模式在一个解决方案中结合两个或多个模式,已解决一般或重复发生的问题。 MVC就是一个复合模式。(书中把MVC夸得不行不行的-0-~,称它为 复合模式之王!) 多的不说,截一张示意图: ...

组合模式

设计模式专题系列: 设计模式 组合模式组合(Composite)模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 组合模式比较复杂一些,跟迭代器模式配合威力强大。 树形结构: 带子元素的元素称为 『节点』(node) 没有子元素的元素称为 『叶节点』(leaf) 包含其他组件的组件为『组合对象』,没有包......

适配器模式

设计模式专题系列: 设计模式 适配器模式(Adapter)适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 适配器非常形象的图: 非常形象的模式,就像生活中的手机充电器,电脑的电源适配器一样。 使用场景当想使用一个已经存在的类,但是不匹配需求接口的时候,可以考虑使用适配器模式来适配,如果有需要还可以做 双向适配,来完成适......

命令模式

设计模式专题系列: 设计模式 命令模式命令模式: 将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。 将请求封装成对象,比如 Runnable 将 发出请求的对象 和 接受与执行这些请求的对象 分隔开来。 一些应用:日程安排、线程池、工作队列等。 感觉Android中的 Handler 相关也可以算是:......

设计原则

设计模式专题系列: 设计模式 持续更新中 设计原则设计模式中的设计原则 封装变化找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。 或者说是:把变化的部分取出来并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。 优势: 代码变化引起的不经意后果变少,系统变得更有弹性 针对接口编程针对接口编程,而不是针对实现编......

策略模式

设计模式专题系列: 设计模式 策略模式定义了算法族,分别封装起来,让它们之间可以相互转换,此模式让算法的变化独立于使用算法的客户。 其实就是利用多态的特性,使用面向接口的编程方式来做。 特点: 定义算法族 分别封装 算法可以相互替代 可以动态切换算法 策略模式通常通过定义 一个Interface,再写不同的实现类去实现的。 体现的设计原则: 开闭原则,针对接口编程 ...

深入浅出设计模式

HeadFirstDesignPatterns

前言 于 2016.8.3 更新 今年的目标里有整理设计模式知识点,一直没有整理,最近效率还可以,希望能整理完. 有部分内容(面向对象基础,设计原则)是一年多以前写的,那时候还非常稚嫩,还需慢慢加深理解。 NOTE:主要目的是给自己看,如果你想学设计模式,推荐看书,后面资料有给出. 笔记目录: 面向对象基础-2015 设计原则(旧-2015版) 设计原则(新-2016版) ......

UML类图知识整理

UML类图UML,进阶必备专业技能,看不懂UML就会看不懂那些优秀的资料。 这里简单整理 类之间的关系泛化关系(generalization) 泛化(generalize): 一条带空心箭头的线表示 实现(realize) : 一条带空心箭头的虚线表示 泛化在Java中表现为继承(extends) ,is-a的关系 实现在Android中表现为implements 接口......

Android程序猿学Css(中)

CSS,继承

前言上篇Android程序猿学Css(上) 资料...

一步一步深入理解CoordinatorLayout

一步一步深入理解CoordinatorLayoutGoogle推出Design库已经一年了,国内也出过一些文章关于CoordinatorLayout,但是都是教你怎么使用用,或者简单的自定义一些Behavior,并没有一篇文章深入去了解它的原理。 刚好这两天为了实现一个UI效果,看了CoordinatorLayout(后面简称Col)的官方文档以及源码,搞懂了它的原理,于是想着拿出来分享......

博客收到第一次打赏的喜与悲

回首与牢骚

前言今天微信突然收到一个 面对面收钱的到账通知 , 楞了一下,谁给我转的钱?仔细一看,显示的名字是 Major,在我的记忆中,我并没有这么一个好友. 我一搜,确实不是我的好友. 刚开始还没反应过来,后来仔细一想,好像我在我的博客开放着我的微信二维码,那他应该是我的读者,这应该是对我博客的一份支持了! 非常激动,非常感激,想加他微信亲自表示感谢,但是搜索不到微信号,很是可惜. ......