
设计模式
文章平均质量分 80
Chen_jay_
阳光帅气
展开
-
Java设计模式----------概述
设计模式的类型根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(B...原创 2018-04-09 12:36:05 · 196 阅读 · 0 评论 -
Java设计模式--------装饰器,桥接和适配器模式的异同
1、介绍前面几篇文章分别介绍了装饰器模式,桥接模式和适配器模式这三种设计模式。这三种设计模式,从设计思想角度上看是非常相似的。三者都是结构型的设计模式,而且都存在依赖抽象的情况。但是三者之间却又存在一些微妙的区别,这也是本文重点关注的内容。2、适配器模式该模式重点强调的是适配的功能。该模式的关键点是:主体类和适配器类实现相同的接口A主体类依赖适配器类适配器类依赖抽象接口B被适配的类实现抽象接口B最...原创 2018-04-10 16:56:42 · 845 阅读 · 0 评论 -
Java设计模式----------中介者模式
1、介绍中介者模式是将多个对象之间通信的网状结构转化为星状结构,从而避免多个对象之间的相互耦合,是一种行为型的设计模式。中介者模式的思路就是加入一个中介者对象,所有对象与对象之间的通信,均通过中介者来进行,所以每个对象不再依赖其他的对象。实现:中介者模式中一般存在多个同事类或者对象,中介者类。同事类或者对象:通常一个对象的状态变化或者行为需要对其他同事产生影响。每个同事对象依赖中介者,通过中介者传...原创 2018-04-16 13:12:54 · 233 阅读 · 0 评论 -
Java设计模式----------外观模式
1、介绍外观模式是一种结构型设计模式。在外观模式中,外观类中提供一个或者一组对外的接口。客户端对于复杂系统的访问是通过外观类的接口进行的,从而解除了客户端与复杂系统之间的耦合,隐藏了复杂系统内部的逻辑。该设计模式主要解决客户端与复杂系统内部子系统的沟通成本高的问题,通过外观类,简化了沟通流程,降低沟通成本。主要的应用场景有:1、医院的接待员(外观类)。通过接待员,可以实现挂号、缴费和取药等一系列的...原创 2018-04-11 16:31:55 · 286 阅读 · 0 评论 -
Java设计模式----------享元模式
1、介绍享元模式通过尽可能的复用已经存在的对象,从而尽量少的创建新对象,以节约系统的内存和提供系统性能。在享元模式中,对象的属性分为两种,内部状态和外部状态。内部状态指的是对象中不随外部变化的属性,属于对象本身的特征属性(比如ID)。外部状态指的是对象中可以随外部变化的属性,可以在外部设置对象的外部状态。享元模式的思想就是缓存和复用,重点关注的是性能。所以当系统中存在大量的对象,内存开销较大或者对...原创 2018-04-11 16:41:18 · 781 阅读 · 1 评论 -
Java设计模式----------代理模式
1、介绍代理模式中,在客户端与对象之间增加了一个代理层。客户端在进行访问时候,不是直接访问对象,而是访问代理。代理模式是一种结构型的设计模式。通过代理模式,可以解决直接访问对象带来的一些问题,并且可以进行访问控制。代理模式的实现中,代理类中依赖实体类,但两者共同实现相同的接口。代理类中对应接口中,会调用实体类的对应接口。听上去与装饰器的实现一样,是的,两者的实现基本上是相同的,只是使用意义上的侧重...原创 2018-04-11 18:50:47 · 378 阅读 · 0 评论 -
Java设计模式----------动态代理原理源码分析
上篇文章ava设计模式----------代理模式中,介绍了两种代理模式(静态代理和动态代理)的应用场景和实际应用案例。本篇文章中,对动态代理的原理做进行深入的分析。关于动态代理,初看可能会比较费解,大概有如下几个疑问:代理是怎么形成的,代理类在哪里?TimeHandler类是做什么用的,在哪里被调用了?客户端调用的时候,写的是调用m.move();,程序是如何执行到了TimeHandler对象的...原创 2018-04-13 10:11:51 · 490 阅读 · 0 评论 -
Java设计模式----------观察者模式
1、介绍观察者模式主要解决的问题是一对多的依赖情况下,被依赖对象的消息通知问题,属于行为型设计模式。在程序设计的时候,有可能多个对象依赖同一个对象。当被依赖的这个对象有状态变更或者需要向依赖的类进行消息通知的时候,可以使用观察者模式。实现方法:在观察者模式中,一般存在观察者角色,抽象观察者角色,被观察者角色(有的场景还会存在抽象被观察者的角色)。观察者需要依赖被观察者,根据被观察者的某些状态改变而...原创 2018-04-13 10:16:28 · 161 阅读 · 0 评论 -
Java设计模式----------命令模式
1、介绍命令模式是一种行为型设计模式。在命令模式中,所有的请求都会被包装成为一个对象。参考了一下其他关于命令模式的文章,其中有谈到说是可以用不同的请求对客户进行参数化。我对这句话的理解是,因为将请求封装成为对象,所以客户的所有操作,其实就是多个命令类的对象而已,即参数化了。命令模式的最大的特点就是将请求的调用者与请求的最终执行者进行了解耦。调用者需要关心的仅仅是请求对象是否被执行了,对于请求对象是...原创 2018-04-13 10:21:29 · 209 阅读 · 0 评论 -
Java设计模式----------迭代器模式
1、介绍迭代器模式的思想是将集合或者容器类中的对象遍历的职责分离出来,使用迭代器来进行负责。从而能够在顺序遍历集合或者容器的时候,无需关注其内部的细节和实现。实现:迭代器模式中的关键实现包含一下几点:集合或者容器类中包含内部类(迭代器类需要感知集合类的保存数据的形式和集合中元素数量),为迭代器的实现类集合或者容器类中包含获取迭代器类对象的方法迭代器抽象接口中包含hasNext和next方法,对应检...原创 2018-04-13 10:30:38 · 180 阅读 · 0 评论 -
Java设计模式----------装饰器模式
1、介绍装饰器模式是一种结构型的设计模式。使用该模式的目的是为了较为灵活的对类进行扩展,而且不影响原来类的结构。有同学说可以通过继承的方式进行实现啊,没错,继承的确可以实现,但是继承的成本相对比较高,而且如果涉及到扩展多个功能的话,继承实现起来的成本较大。装饰器模式的思想是,对原来的类进行一层封装,通过依赖实现扩展。但是装饰器的依赖有两个比较重要的特点。第一,装饰器的抽象类,依赖的是原来类的接口。...原创 2018-04-10 16:50:16 · 313 阅读 · 0 评论 -
Java设计模式----------组合模式
1、介绍组合模式是一种结构型的设计模式。组合模式中,对象具有一个List,用于保存其他的同类对象,从而形成了一个树形的结构,表示整体与部分的关系。在树形结构中,枝干节点和叶子节点会实现相同的接口(或者就是同一个类),从而在外部使用该对象时候,无需关注树形结构内部的细节,而可以统一的进行调用。组合模式的使用场景,就是当出现树形结构,而且不需要关注复杂对象内部细节,只需要把复杂对象当作单一对象处理的时...原创 2018-04-10 16:40:10 · 228 阅读 · 0 评论 -
Java设计模式----------桥接模式
1、介绍桥接模式是一种结构型的设计模式,主要是特点是将抽象部分与实现部分分离开来,从而能够进行独自的变化。在桥接模式中,所谓的桥,个人理解是在抽象层中,将接口联系到一个抽象类中,更确切的说,是依赖关系。桥接模式主要适用场景是,某个对象需要从两个或者多个(一般是两个)维度进行描述或者操作的时候,能够简洁的进行处理。特点:抽象与实现分离。抽象层依赖,具有非常好的扩展性。适用场景:当场景中某个事物需要从...原创 2018-04-10 16:34:25 · 338 阅读 · 0 评论 -
Java设计模式----------工厂模式
1、介绍工厂模式是一种对象创建型的设计模式,主要特点就是屏蔽对象创建细节,只暴露一个通用的创建接口。主要解决:主要解决接口选择的问题。何时使用:需要不同条件下创建不同子类的实例时。如何解决:在工厂接口中添加对产品子类的支持,返回的也是一个抽象的产品。关键代码:工厂方法中根据不同条件,实例化不同的子类进行返回。应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,...原创 2018-04-09 12:42:13 · 153 阅读 · 0 评论 -
Java设计模式----------抽象工厂模式
1、介绍意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决:主要解决接口选择的问题。何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。如何解决:在一个产品族里面,定义多个产品。每个具体的工厂负责一个产品族。抽象工厂的返回值为最高级抽象产品。关键代码:在一个工厂里聚合多个同类产品(在同一个产品族中)。应用实例:举一个衣服与衣柜的例子。家里边,有男装...原创 2018-04-09 12:51:14 · 239 阅读 · 0 评论 -
Java设计模式----------单例模式
1、介绍单例模式是一种创建型模式。该模式中,构造方法是私有的,类内自己创建实例化对象,并返回给外部调用。通过加锁能够保证该类只有一个实例化对象,节省系统资源和开销。意图:保证一个类仅有一个实例,提供给外部调用。主要解决:避免类被频繁地创建与销毁,增加性能消耗;避免内存中保存多份实例,增加内存开销。何时使用:需要控制实例数目,节省系统资源的场景。如何解决:判断系统是否已经有这个单例,如果有则返回,如...原创 2018-04-09 13:06:30 · 183 阅读 · 0 评论 -
Java设计模式----------建造者模式
1、介绍建造者模式是一种创建型模式,主要特点是通过逐步添加单体对象形成一个复杂的对象。主要解决:向复杂对象中添加多个单体对象的问题。复杂对象类似一个集合,包含多个单体对象,所以存在非常多的变化。单体对象则为确定的不变的对象。通过建造者模式,将变与不变分开如何解决:复杂对象类似一个容器,向其中添加单体对象。对于单体对象,最高层实现相同的Item接口(即所有的具体的对象具有共同的特点)。关键代码:所有...原创 2018-04-09 13:21:17 · 192 阅读 · 0 评论 -
Java设计模式----------原型模式
1、介绍原型模式是一种创建型的设计模式,主要的特点是通过克隆已有的对象来进行创建,而不需要通过new操作(甚至是一项一项的设置属性)来实现。原型模式特别适合于构造对象成本较大的场景或者对性能要求较高的场景。主要解决:在运行期建立对象。使用场景:对象的构造过程比较复杂,成本较高。对性能要求比较高的场景。关键技术:实现Cloneable接口,定义clone方法。注意事项: 1. 原型模式属于浅拷贝,只...原创 2018-04-09 13:27:10 · 219 阅读 · 0 评论 -
Java设计模式----------策略模式
1、介绍策略模式的思想是提取算法或者行为,对算法或者策略进行封装成类,并装配到一个环境类(context)上,使得环境类可以使用不同的算法或者策略来解决不同的问题。策略模式是一种行为型设计模式。这种设计模式解决的是硬编码场景中的算法扩展问题。针对某一个场景,可能存在多个算法来进行处理。这多个算法,可能是写在一个工具类的不同的方法中,也有可能是写在一个方法中根据不同的条件进行if-else的选择。但...原创 2018-04-15 15:15:32 · 239 阅读 · 0 评论 -
Java设计模式----------状态模式
1、介绍状态模式的思想是将状态以及状态间的转换规则(状态机)和状态对应的特性行为封装成为一个对象,使用该对象装配环境类(context),以达到进行状态切换的时候能够自动变更context的某些行为(context的行为主要依靠状态的行为)。实现:状态模式中一般存在三种角色:抽象状态接口,具体状态类和环境类(context)。抽象状态接口:抽象接口中定义状态类的通用方法具体状态类:实现状态接口的方...原创 2018-04-15 15:22:00 · 251 阅读 · 0 评论 -
Java设计模式----------模板方法模式
1、介绍模版方法模式的思想是在抽象类中定义程序的主体框架,在子类中实现具体的细节,是一种行为型设计模式。实现:模版方法模式中存在两个角色,抽象类和实现类。在抽象类中,定义了程序的主体结构或者流程,该方法可以设置成final的,这样子类中就无法重写。而对于其他的细节的方法定义,则延迟到实现类中。使用场景:比如做饭,都需要开火,架锅,放入食材这样一套的主体流程,这个可以放在抽象类中。但是开多大的火,使...原创 2018-04-15 15:29:14 · 217 阅读 · 0 评论 -
Java设计模式----------适配器模式
1、介绍适配器模式属于一种结构型的设计模式,如同名字一样,用于实现两个原本不相关的接口的连通性,即进行适配。通过适配器模式,可以扩展类的功能,使其拥有其他类的功能适配器模式的使用场景,凡是能联系到适配这两个字的,一般都是适用的。比如说,电压适配器,通过在电源插排上接上一个电压适配器,我们的手机就可以进行充电了。比如说,读卡器,通过在电脑的USB接口上插上一个读卡器,我们的TF/SD/CF等内存卡就...原创 2018-04-10 16:27:11 · 268 阅读 · 0 评论 -
图解设计模式之Iterator模式————一个一个遍历
1、Iterator模式 使用java语言显示数组arr中的元素时,我们可以使用下面这样的for循环语句来遍历数组。for (int i = 0,l = arr.length; i < l; i++){ System.out.println(arr[i]); } 请注意这段代码中的循环变量i。该变量的初始值是0,然后会递增为1,2,3,。。。,程...原创 2018-07-07 22:39:57 · 874 阅读 · 1 评论