Java 的设计模式
文章平均质量分 81
hsgao_water
这个作者很懒,什么都没留下…
展开
-
行为型模式-责任链模式
责任链模式使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象有处理它为止。 责任链角色:抽象处理者(Handler)角色:该角色对请求进行了抽象,并定义一个方法以设定和返回下一个处理者的引用;具体处理者(Concrete Handler)角色:该角色接到请求后,可以选择将请求处理掉,或者将请求传原创 2015-07-28 16:44:39 · 314 阅读 · 0 评论 -
结构型模式-适配器模式
适配器模式将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式角色目标(Targe)角色:该角色定义要转换成的目标接口;源(Adaptee)角色:需要被转换成目标角色的源角色;适配器(Adapter)角色:该角色是适配器模式的核心,其职责是通过继承或是类关联的方式,将源角色转换为目标角色。适配原创 2015-07-23 15:57:46 · 266 阅读 · 0 评论 -
结构型模式-适配器模式
适配器模式将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式角色目标(Targe)角色:该角色定义要转换成的目标接口;源(Adaptee)角色:需要被转换成目标角色的源角色;适配器(Adapter)角色:该角色是适配器模式的核心,其职责是通过继承或是类关联的方式,将源角色转换为目标角色。 适原创 2015-07-23 16:01:04 · 223 阅读 · 0 评论 -
行为型模式-观察者模式
观察者模式定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。观察者模式角色抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现;抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新原创 2015-08-04 16:32:28 · 50 阅读 · 0 评论 -
行为型模式-备忘录模式
备忘录模式在不破坏原封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样,以后就可以将该对象恢复到原先保存的状态。备忘录模式角色发起人(Originator)角色:该角色记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据;备忘录(Memento)角色:该角色负责存储发起人角色的内部状态,在需要时提供发起人需要的备份状态数据;负责原创 2015-08-04 16:56:18 · 214 阅读 · 0 评论 -
结构型模式-桥接模式
桥接模式将抽象和实现解耦,使得两者可以独立地变化桥梁模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。桥梁模式角色 抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用; 修正抽象化(R原创 2015-07-24 09:53:15 · 288 阅读 · 0 评论 -
结构型模式-外观模式
外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供了一个高层次的接口,使得子系统更易使用。外观模式注重“统一的对象”,即提供一个访问子系统的接口,只有通过该接口(Facade)才能允许访问子系统的行为发生。 外观模式角色外观(Facade)角色:客户端可以调用该角色的方法,该角色知晓相关子系统的功能和责任。正常情况下,本角色会将客户端发来原创 2015-07-24 11:18:24 · 372 阅读 · 1 评论 -
结构型模式-亨元模式
亨元模式使用共享对象可以有效地支持大量细粒度的对象亨元模式以共享的方式高效地支持大量的细粒度对象。亨元对象能做到共享的关键是区分内部状态(Internal State)和外部状态(External State)。内部状态是存储在亨元对象内部的、可以共享的信息,并且不会随环境改变而变化。外部状态是岁环境改变而改变且不可以共享的状态。亨元对象的外部状态必须由客户端保存,并在亨元对象创建原创 2015-07-24 13:41:36 · 489 阅读 · 0 评论 -
行为型模式-访问者模式
访问者模式 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 访问者模式涉及的角色 (1)抽象访问者角色(Visitor):声明了一个或者多个访问操作,形成所有的集体元素角色必须实现的接口 (2)具体访问者角色(ConcreteVisitor):实现抽象访问者所声明的接口,也就是抽象访问者所声明的各个访原创 2015-08-05 08:43:37 · 293 阅读 · 0 评论 -
代理模式-延迟加载场景
延迟加载的思想:如果当前没有使用这个组件时,则不需要真正地去初始化它,而是用一个代理对象去替代它的原有位置。当真正需要使用的时候,才对它进行加载。使用代理模式实现延迟加载是很有意义的,首先从时间轴上分散系统的压力,尤其在系统启动时,不必完成所有的初始化工作,从而加速启动时间;其次,对于很多真事主题而言,在软件启动到系统关闭的整个过程,可能都不会被调用,初始化这些数据无疑是一种资源的浪费。假设某原创 2016-06-06 17:03:53 · 2028 阅读 · 1 评论 -
代理模式-动态代理
代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理、过滤、事后处理等服务,动态代理及通过反射机制动态实现代理机制。JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程。JDK 中的 java.lang.reflect.Proxy 类可以用来实现动态代理。主题接口:package cn.com.原创 2016-06-07 10:58:50 · 255 阅读 · 0 评论 -
结构型模式-组合模式
组合模式将对象组合成树形结构以表示“部分-整体”的层次架构,使得用户对单个对象和组合对象的使用具有一致性。 组合模式角色抽象构件(Component)角色:该角色定义了参加组合对象的共有方法和属性,规范一些默认的行为接口;叶子构件(Leaf)角色:该角色是叶子对象,其下没有其他的分支,定义出参加组合的原始对象的行为;树枝构件(Composite)角色:该角色代表参加组合的、原创 2015-07-23 16:59:23 · 383 阅读 · 0 评论 -
创建型模式-原型模式
原型模式用原型实例指定创建对象的种类,并且通过这些原型创建新的对象。原型模式角色客户角色:该角色提出创建对象的请求;抽象原型(Prototype)角色:该角色是一个抽象角色,通常由一个Java接口或者抽象类实现,给出所有具体原型类所需的接口;具体原型(Concrete Prototype)角色:该角色是被复制的对象,必须实现抽象原型的接口。 原型模式优点性能原创 2015-07-16 11:17:38 · 402 阅读 · 0 评论 -
Java的设计六大原则
一、单一原则(SRP:Single Responsibility Principle)一个类,应当只有一个引起它变化的原因:即一个类应该只有一个职责。一个庞大的对象承担太多的责任,当客户端需要该对象的某一职责时,就不得不将所有的职责包括进来,从而造成冗余的代码。类的职责越少,则对象之间的依赖关系越少,耦合度就减弱,受其他对象的约束与牵制就越少,从而保证系统的扩展性。单一职责的优点原创 2015-07-13 17:25:10 · 383 阅读 · 0 评论 -
行为型模式-策略模式
策略模式定义一组算法,将每个算法封装起来,并且使他们之间互相联系。其用意是定义一组算法,将每一个算法封装到具有共同接口的独立类中,从而使他们可以互相切换,使得算法在不影响到客户端的情况下发生变化。 策略模式角色环境(Context)角色:该角色叫做上下文角色,起到承上启下的作用,屏蔽高层对策略、算法的直接访问,它持有一个策略的引用;抽象策略(Strategy)角色:该角原创 2015-07-31 08:15:57 · 282 阅读 · 0 评论 -
行为型模式-模板方法模式
模板方法模式模板方法模式是类的行为模式。定义一个操作中的算法框架,将一些步骤延迟到子类中实现。使得子类可以改变一个算法的结构即可重定义该算法的特定步骤。模板方法需要开发抽象和子类设计师之间的写作,这就相当于一个总设计师负责给出一个算法和逻辑,而其他的设计师则给出这个算法逻辑的具体实现。 模板方法模式的角色抽象模板(Abstract Template)角色:该角色定义了一原创 2015-07-31 08:57:29 · 360 阅读 · 0 评论 -
行为型模式-命令模式
命令模式命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式角色客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收;命令原创 2015-07-28 14:37:39 · 368 阅读 · 0 评论 -
行为型模式-状态模式
状态模式当一个对象内在状态改变时允许改变行为,这个对象看起来改变了其类型。状态模式的核心是封装,状态的变更引起行为的变动,从外部看来就好像该对象对应的类发生改变一样。 状态模式角色抽象状态(State)角色:该角色用于封装环境对象的一个特定状态所对应的行为;具体状态(Concrete State)角色:该角色实现环境对象一个特定状态所对应的行为;环境(Context)角原创 2015-07-31 14:42:44 · 379 阅读 · 0 评论 -
创建型模式-建造者模式
建造者模式(Builder pattern)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户和指导联系,指导者联系建造者最后得到产品牌。即建造模式可以强制实现一种分步骤进行的建造过程。建造者模式将复杂的内部创建封装在内部,对于外部调用者来说,只需要传入建造者和建造工具,对于内部是如何建造成原创 2015-07-16 09:24:32 · 379 阅读 · 0 评论 -
结构型模式-代理模式
定义:为其他对象提供一种代理以控制该对象的访问,代理模式的角色抽象主题(Subject)角色:该角色是真实主题和代理主题的共同接口,以便在使用真实主题的地方都可以使用代理主题;代理主题(Proxy Subject)角色:也叫做委托类、代理类,该角色主要控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理事务前后做预处理或善后处理工作;真实主题(Rea原创 2015-07-22 09:41:20 · 330 阅读 · 0 评论 -
创建型模式-单例模式
什么是单例模式确保一个类只有一个实例,而且自行实例化并向整个系统提供整个实例。单例模式的优点由于单例模式在内存中只存在一个实例,可以减少内存的开支,特别是对一个对象需要频繁的创建、销毁,而且创建和销毁的性能又无法优化时,单例模式的优势就非常明显;由于单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要较多的资源时,如读取配置、产生其他依赖对象时,则可以原创 2015-07-13 16:26:41 · 330 阅读 · 0 评论 -
结构型模式-装饰模式
装饰模式动态地给一个对象增加额外的职责。就增加功能来说,装饰模式比生成子类更加灵活。装饰模式角色抽象构件(Component)角色:该角色用于规范需要装饰的对象(原始对象);具体构件(Concrete Component)角色:该角色实现抽象构件接口,定义一个需要装饰的原始类;装饰(Decorator)角色:该角色持有一个构件对象的实例,并定义一个与抽象构件接口一致的接原创 2015-07-23 08:39:09 · 293 阅读 · 0 评论 -
创建型模式-工厂模式
简单工厂方法模式简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例简单工厂模式组成工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现;抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现; 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。package des原创 2015-07-14 15:05:49 · 327 阅读 · 0 评论 -
适配器模式的用例
适配器模式:适配器模式是将接口改造成用户希望的接口,适配器让原本和接口不兼容的类能和接口一起工作。下面是一个工作用到的适配器扩展模式如类图所示,我们拥有一个目标接口Target,包含一个方法doBusiness,一个需要被适配的类Adaptee,包含三个方法,还有我们的核心适配器类Adapter,这是一个抽象类。再看两个实现类,一个是简单的实体类,直接实现了Target的实体类原创 2016-09-23 17:06:55 · 512 阅读 · 0 评论