设计模式
Bryce李小白
知行合一
展开
-
面向对象六大原则之依赖倒置原则
前言 依赖倒置原则英文名称是Dependence Inversion Principle,缩写是DIP。依赖倒置原则指代了一种特定的解耦形式,使得高层次的模块不依赖于低层次的模块的实现细节的目的,依赖模块被颠倒了。依赖倒置原则关键点 (1) 高层模块不应该依赖低层模块,两者都应该依赖其抽象; (2) 抽象不应该依赖细节 (3) 细节应该依赖抽象 在Java语言中,原创 2017-10-03 11:53:47 · 544 阅读 · 0 评论 -
面向对象六大原则之接口隔离原则
前言 接口隔离原则英文名称是InterfaceSegregation Principles,缩写是ISP。ISP的定义是:客户端不应该依赖它不需要的接口。另一种定义是:类间的依赖关系应该建立在最小的接口上。作用 接口隔离原则将非常庞大,臃肿的接口拆分成更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。目的 接口隔离的目的是系统解开耦合,从而容易重构,更改和重新部署。范例原创 2017-10-03 14:27:51 · 623 阅读 · 0 评论 -
设计模式之Builder模式的简单实现
Builder模式介绍 Builder模式是一步一步创建一个复杂对象的创建型模型,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和表示隔离开来 因为一个复杂的对象有很多大量组成部件,如汽车,有车轮,方向盘,发动机,还有各种小零件等,如何将这些部件装配成一辆汽车,这个装配过程很漫长,也很复杂,对于这种情原创 2017-10-03 16:14:58 · 571 阅读 · 0 评论 -
单例模式的几种实现方式
单例模式介绍 单例模式是应用最广的模式之一,也可能是很多初级工程师唯一会使用的设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。懒汉模式 懒汉模式是声明一个静态对象,并且在用户第一次调用getInstance时进行初始化,而饿汉模式是声明静态对象时就已经初始化。懒汉单例模式实现如下:public class Singleton{private static Single原创 2017-10-04 20:41:20 · 931 阅读 · 0 评论 -
设计模式之工厂方法模式的简单实现
工厂方法模式介绍 工厂方法模式(Factory pattern),是创建型设计模式之一。工厂模式是一种结构简单的模式,其在我们平时开发中应用很广泛,也许你并不知道,但是你已经使用了无数次该模式了,如Android中的Activity里的各个生命周期方法,以onCreate方法为例,它就可以看作是一个工厂方法,我们在其中可以构造我们的View并通过setContentView返回给framewor原创 2017-10-04 22:31:17 · 791 阅读 · 0 评论 -
设计模式之抽象工厂模式的简单实现
抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pattern),也是创建型设计模式之一。在上一篇中我们介绍了工厂方法模式 那么这个抽象工厂又是怎么一回事呢? 大家联想一下现实生活中的工厂肯定都是具体的,也就是说每个工厂都会生产某一种具体的产品,那么抽象工厂意味着生产出来的产品是不确定的,那这岂不是很奇怪? 抽象工厂模式起源于以前对不同抽象系统的图形化解决方案,如不原创 2017-10-05 09:34:09 · 680 阅读 · 0 评论 -
时势造英雄之策略模式
策略模式的介绍 在软件开发中也常常遇到这样一种情况:实现某一功能可以有多种算法或者策略,我们根据实际情况选择不同的算法策略来完成该功能。例如:排序算法,可以使用插入排序,归并排序,冒泡排序等。 针对这种情况,一种常规的方法是将多种算法写在一个类中。例如,需要提供多种排序算法,可以将这些算法写到一个类中,每一个方法对应一个具体的排序算法;当然,也可以将这些排序算法封装在一个统一的方法中,原创 2017-10-05 14:00:07 · 442 阅读 · 0 评论 -
解决,解耦的钥匙之观察者模式
观察者模式介绍 观察者模式是一个使用率非高的模式,它最常用的地方是GUI系统,订阅-发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI具有易变性,尤其是前期随着业务的改变或者产品的需求修改,应用界面也会经常性变化,但是业务逻辑基本变化不大,此时,GUI系统需要一套机制来应对这种情况,使得UI层与具体的业务原创 2017-10-06 08:43:12 · 629 阅读 · 0 评论 -
结构型设计模式之代理模式
代理模式的介绍 代理模式(Proxy Pattern)也称为委托模式,属于结构型设计模式。其实不少设计模式中都有代理模式的影子,那么何为代理呢? 其实代理在我们日常生活中并不少见,对于程序员来说莫过于代理上网了,连上代理服务器地址,就可以轻松畅游全世界的网络,还有每天吃饭时赶进度是常事,叫朋友帮忙买饭也是一种代理。总而言之,也许你并不留意,但是代理的确是无处不在的,现实生活中如此,我们的C原创 2017-10-06 11:49:41 · 383 阅读 · 0 评论 -
行为型设计模式之责任链模式
责任链模式介绍 责任链模式(Iterator Pattern),是行为型设计模式之一。什么是”链”?我们将多个结点首尾相连所构成的模型称之为链。责任链模式的定义 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止责任链模式的使用场景 多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决原创 2017-10-06 15:02:45 · 409 阅读 · 0 评论 -
面向对象六大原则之开闭原则
前言 开闭原则的英文全称是Open Close Principle,缩写是OCP,它是Java世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活的系统。开闭原则的定义 软件中的对象(类,模块,函数等)应该对于扩展是开放的,但是,对于修改是封闭的。范例 实现图片加载缓存功能public class ImageLoader{//图片缓存ImageCache mImageCa原创 2017-10-03 10:18:58 · 666 阅读 · 0 评论 -
面向对象六大原则之里氏替换原则
前言 我们知道,面向对象的语言的三大特点是继承,封装,多态,里氏替换原则就是依赖于继承,多态这两大特性。里氏替换原则简单来说就是,所有引用基类的地方必须能透明地使用其子类的对象。 通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,就两个字:抽象。范例//窗口类pub原创 2017-10-03 07:28:54 · 459 阅读 · 0 评论 -
统一的编程接口之外观模式
外观模式介绍 外观模式(Facade)在开发过程中的运用频率非常高,尤其是在现阶段各种第三方SDK充斥在我们的周边,而这些SDK很大概率会使用外观模式。通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节。当然在我们的开发过程中,外观模式也是我们封装API的常用手段,例如网络模块,ImageLoader模块等。 可能你已经在开发中原创 2017-10-10 10:32:56 · 432 阅读 · 0 评论 -
设计模式之工厂设计
工厂设计是Java开发中使用最多的一种设计模式,那么什么叫工厂设计? 工厂设计有哪些作用呢?请先观察以下程序中interface Fruit{ // 定义一个水果接口 public void eat() ; // 吃水果}class Apple implements Fruit{ public void eat(){ System.out.println(原创 2017-09-20 13:39:43 · 291 阅读 · 0 评论 -
设计模式之代理设计
代理设计也是在java开发中使用较多的一种设计模式。 所谓的代理设计就是代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理,就好像在生活中经常使用的代理上网一样,客户通过网络代理连接网络,由代理服务器完成用户权限和访问限制等与上网相关的的操作,如图所示 不管是代理操作还是真实的操作,其共同的目的就是上网,所以用户关心的只是上网,至于具体是如何操作的用户并不关心,原创 2017-09-20 18:07:15 · 271 阅读 · 0 评论 -
设计模式系列之适配器模式
适配器模式介绍 适配器模式在我们的开发中使用率极高,从代码中随处可见的Adapter就可以判断出来。从最早的ListView,GridView到现在的RecyclerView都需要使用Adapter,并且在开发中我们遇到的优化问题,出错概率较大的地方也基本都出自Adapter,这是一个让人又爱又恨的角色。 说到底,适配器是将两个不兼容的类型融合在一起,它有点像粘合剂,将不同的东西通过一原创 2017-10-07 09:18:46 · 352 阅读 · 0 评论 -
设计模式系列之模板方法模式
模板方法模式介绍 在面向对象开发过程中,通常会遇到这样一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变,例如,执行程序的流程大致如下: (1) 检查代码的正确性 (2)链接相关的类库 (3)编译相关的代码 (4)执行程序 对于不同的程序设计语言,上述4个步骤原创 2017-10-07 17:02:15 · 464 阅读 · 0 评论 -
设计模式系列之组合模式
组合模式介绍 组合模式(Composite Pattern) 也称为部分整体模式(Part-Whole Pattern), 结构型设计模式之一,组合模式比较简单,它将一组相似的对象看作一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。生活中比较典型的一个例子就是组织结构的树状图。 例如一个公司的组织结构树状图,其中总原创 2017-10-07 22:20:01 · 395 阅读 · 0 评论 -
设计模式之适配器设计
对于Java程序来说,如果一个类要实现一个接口,则必须要覆写此接口中的全部抽象方法,那么如果此时一个接口中定义的抽象方法过多,但是在子类中又用不到这么多抽象方法,则使用起来肯定很麻烦,所以此时就需要一个中间的过渡,但是此时过渡类又不希望被直接使用,所以将此过渡类定义成一个抽象类最合适,即一个接口首先被一个抽象类先实现(此抽象类通常被称为适配器类),并在抽象类中实现接口的若干方法(方法体为空),则以后原创 2017-09-20 18:21:36 · 220 阅读 · 0 评论 -
设计模式之观察者模式
什么叫观察者在解释观察者设计模式的概念之前,读者先来看一个简单的例子:现在很多的购房者都在关注着房子的价格变化,每当房子价格变化时,所有的购房者都可以观察得到,实际上以上的购房者都属于观察者,他们都在关注着房子的价格。实际上这就叫观察者设计模式,如图所示: 在Java中可以直接依靠Observable类和Observer接口轻松地实现以上功能观察者模式实现在java.util包中提供了Observ原创 2017-09-20 18:51:45 · 638 阅读 · 0 评论 -
结构性设计模式之装饰模式
装饰模式介绍 装饰模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),也是结构性设计模式之一,其使用一种对客户端透明的方式来动态扩展对象的功能,同时它也是继承关系的一种替代方案之一。在现实生活中你也可以发现很多装饰模式的例子,或者可以大胆地说装饰模式无处不在,就拿人来说,人需要各式各样的衣着,不管你穿着怎样,但是,对于个人的本质来说是不变的,充其量只是在外原创 2017-10-10 08:30:28 · 394 阅读 · 0 评论 -
浅谈单例模式的优缺点
前言 单例模式是运用频率很高的模式,但是,由于在客户端通常没有高并发的情况,因此,选择哪种实现方式并不会有太大的影响。即便如此,由于效率考虑,我会推荐使用DCL(两次判断一次加锁)和静态内部类实现单例。优点 (1) 由于单例模式在内存中只有一个实例,减少内存开支,特别是一个对象需要频繁地创建销毁时,而且创建或销毁时性能又无法优化,单例模式就非常明显了 (2) 由于单例模式只生成一原创 2017-10-02 10:58:56 · 13799 阅读 · 1 评论 -
Android源码中的单例模式
前言 在Android系统中,我们经常会通过Context获取系统级别的服务,如WindowsManager,ActivityManagerService等,更常用的是一个LayoutInflater的类,这些服务会在合适的时候以单例的形式注册在系统中,在我们需要的时候就通过Context的getSystemService(String name)获取。我们以LayoutInflater为例来说原创 2018-03-10 18:20:32 · 444 阅读 · 0 评论