学习java设计模式
主要是通过《设计模式之禅》总结自己的学习笔记。我对java设计模式的理解以及概念、例子、应用都是基于对这本书的学习。希望通过自己的比较总结对初学者有所帮助,并期待与大家一起进步!
阿卧
不懂就问,不会就学。好好做学问
展开
-
设计模式(二十三)---桥梁模式
定义:将抽象和实现解耦,使得两者之间可以独立的变化。 Abstract抽象化角色 ---|主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用。该角色一般是抽象类 Implementor实现化角色 ---|他是接口或者抽象类,定义角色必须的行为和属性 RefinedAbstraction修正抽象化角色 ---|它引用实现化角色对抽象化角色进行修正原创 2015-12-23 11:54:03 · 690 阅读 · 0 评论 -
设计模式(二十二)---享元模式
定义:使用共享对象可有效的支持大量的细粒度的对象。 享元模式的定义为我们提出了两个要求:细粒度的对象和共享对象。 我们知道分配太多的对象到应用程序中将有损程序的性能,同时还容易造成内存溢出。享元模式就可以有效的避免。 细粒度对象由于是对象数量多且性质相近,我们将这些对象分为两个部分:内部状态和外部状态。 内部状态: ---|内部状态是对象可共享出来的信息,存储在享元对原创 2015-12-23 10:13:03 · 748 阅读 · 1 评论 -
设计模式(二十)---状态模式
定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。一般模式 state:抽象状态角色 ---|接口或抽象类,负责对象状态定义,并且封装环境角色以实现状态切换。 ConcreteState:具体状态角色 ---|每一个具体状态必须完成两个职责,本状态的行为管理以及去想状态处理,通俗的说,就是本状态下要做的事情, 以及本状态如何过渡到其原创 2015-12-22 10:36:40 · 580 阅读 · 0 评论 -
设计模式(十八)---访问者模式
定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。一般模式 Visitor----抽象访问者 --|抽象类或接口,声明访问者可以访问那些元素,具体到程序中的就是visit的参数定义那些对象是可以被访问的。 ConcreteVisotor---抽象元素 ---|他影响访问者访问到类后,该怎么做原创 2015-12-21 16:48:54 · 770 阅读 · 0 评论 -
设计模式(十八)---备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将 该对象恢复到原先保存的状态。一般模式: Originator发起人角色 ---|记录当前时刻的内部状态,负责定义那些属于备份范围的状态,负责创建和恢复备忘录数据 Memento备忘录角色 ---|负责存储Originator发起人对象的内部状态,在原创 2015-12-21 10:52:38 · 805 阅读 · 0 评论 -
设计模式(十七)---门面模式
定义:(Facada Pattern)要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行, 门面模式提供一个高层次的接口,使得子系统更易于使用。一般模式: Facade门面角色 ---|客户端可以调用这个角色的方法,此角色知道子系统的所有功能和责任。 subSystem子系统角色 ---|可以同时一个或多个子系统。每个子系统都不是一个单独原创 2015-12-20 14:42:56 · 646 阅读 · 0 评论 -
设计模式(十六)---观察者模式
定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。一般弄模式 Subject被观察者 ---|定义被观察者必须实现的职责,它必须能够动态的增加、取消观察者,一般是抽象类或者实现类,完成管理观察者并通知观察者。 Observer观察者 ---|观察者接到信息后,进行update操作 Conc原创 2015-12-20 11:29:02 · 598 阅读 · 0 评论 -
设计模式(十五)---组合模式
定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。一般模式: Component抽象构件角色 --|定义参与组合对象的共有方法和属性,可以定义一些默认的行为或属性。 Leaf叶子构件 --|叶子对象,其下再也没有其他的分支,也是遍历的最小单位。 Composite树枝构件 --|树枝原创 2015-12-18 11:04:25 · 690 阅读 · 0 评论 -
设计模式(十四)---迭代器模式
定义:它提供一个方法访问一个容器对象中的各个元素,而又不需要暴露该对象的内部细节。 这个在javaAPI中已经封装的很好了,任何一个容器的遍历都可以使用Iterator来迭代。 一般模式: Iterator抽象迭代器 抽象迭代器负责定义访问和遍历元素的接口,基本上有三个方法。next()、hasNext()、remove(); ConcreteIterato原创 2015-12-17 10:49:43 · 456 阅读 · 0 评论 -
设计模式(十三)---适配器模式
定义:将一个类的接口变换成客户端所期待的的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器一般模式: Target角色: 该角色定义把其他类转换为何种接口,也就是我们的期望接口。 Adaptee源角色 你想把谁转换成目标角色,这个“谁”是原角色,它是已经存在的、运行良好的类或对象,经过Adapter包装,转换成一个全新的角色。原创 2015-12-17 10:10:46 · 485 阅读 · 0 评论 -
设计模式(十二)---策略模式
定义:定义一组算法,将每个算法都封装其阿里,并且使它们之间可以互换。 策略模式的一般模式: Context封装角色 ---|它也叫作上下文对象,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问, 封装可能存在的变化。 Strategy抽象策略角色 ---|策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。 Conc原创 2015-12-16 11:04:41 · 486 阅读 · 0 评论 -
设计模式(10)---责任链模式
定义: 使多个对象都有机会处理请求,从而避免了发送者和接收者之间的耦合关系。 将这些对象连成一条链,并沿着这条连传递该请求,直到有对象处理该请求为止。 一个例子: 古代女子讲究“三从四德”,当女子去做一件事情时,如果该女子未出嫁,首先要向父亲请求。 出嫁,就要像丈夫请求;夫死,就要向儿子请求。模拟这个女子发送请求的链式关系。 抽象的处理者实现三个职责:原创 2015-12-15 15:09:42 · 444 阅读 · 0 评论 -
设计模式(十一)---装饰模式
英文名称:(Decorator Pattern) 定义:动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。装饰模式的一般模式 Component抽象构件 ---|Component是一个接口或者是抽象类,就是定义我们最核心的对象,也就是最原始的对象。 ConcreteComponent具体构件 ---|Concr原创 2015-12-16 09:34:08 · 440 阅读 · 0 评论 -
设计模式(九)---命令模式
定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志, 可以提供命令的撤销和恢复功能。命令模式的通用模式: 该类图中 Receive接受者角色 ---|该角色就是干活的角色,命令传递到这里应该是被执行的 Command命令角色 ---|需要执行的所有命令都在这里声明 Invoker调用者角色原创 2015-12-15 09:57:57 · 443 阅读 · 0 评论 -
设计模式(八)---中介者模式
定义:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互交互,从而使其耦合松散,而且可以独立地改变他们之间的交互。 中介者就是将蜘蛛网状的用户关系模型改变成星形的用户关系模型。中介者的通用模型Mediator抽象中介者角色 --|抽象中介者角色定义统一的接口,用于各同事角色直接的通信。 Concrete Mediator 具体中介者角色原创 2015-12-14 17:57:10 · 473 阅读 · 0 评论 -
设计模式(七)---原型模式
英文名称:Prototype Pattern定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式的核心就是一个clone方法,通过该方法进行对象的拷贝,java提供了一个Cloneable接口,来标示这个对象是可拷贝的。 一个例子: 一个银行,定时给不同的用户发送特定的邮件。 AdvTemplate类,advSubject(标题)ad原创 2015-12-14 17:49:06 · 402 阅读 · 0 评论 -
设计模式(六)---代理模式
英文名称:Proxy Pattern 定义:为其他对象提供一种代理以控制对这个对象的访问。 我的理解:代理模式相当于现实生活中的明星经纪人,提供了一个很好的访问控制。 代理模式的分类: 静态代理模式 --|普通代理模式 --|强制代理模式 动态代理模式代理模式的一般模式: Subject抽象主题角色 --|抽象主题类可以是抽象类也原创 2015-12-13 12:01:12 · 576 阅读 · 0 评论 -
设计模式(五)---建造者模式
英文名称: Builder Pattern又叫做生成器模式 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者的一般模式 Product产品类:实现了模板方法模式,也就是有模板方法和基本方法。 Builder类抽象建造者,规范产品的组件,一般是由子类实现 ConcreteBuilder具体建造者,实现抽象类类定义的 所有方法,原创 2015-12-12 18:39:10 · 480 阅读 · 0 评论 -
设计模式(四)---模板方法模式
英文名称:Template Method Pattern。 定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,是的子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 我的理解:模板方法模式在编程中常常用到,例如Android开发中创建Activity我们继承Activity,需要重写onCreat()方法和其他固定的方法一样,这就是模板方法模式的应用。他首先要定义一原创 2015-07-03 20:42:16 · 1062 阅读 · 0 评论 -
设计模式(三)---抽象工厂模式
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无须指定他们的具体类。 我的理解:抽象工厂模式是工厂模式的升级,它针对多个业务品种,业务分类时通过抽象工厂模式来解决。 就好比工厂中的流水线工作一样。 一个例子: 还是继续女娲造人的故事,女娲在制造出白人、黑人、黄种人之后,又想创造出男人和女人。那么如何来解决这个需求呢?解决方案: 1、定义一个接口Human原创 2015-07-01 22:12:01 · 812 阅读 · 0 评论 -
设计模式(二)---工厂方法模式
工程方法模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。我的理解:工厂方法模式不是通过new关键字来创建对象的,而是通过工厂接口提供的方法来创建其他对象。 工厂设计模式,在开发过程中很常见,下面使用一个例子来引入普遍的工厂设计模式。 一个加工厂商加工不同的产品。 Product类,抽象类,表示不同的产品。 Fo原创 2015-07-05 17:06:17 · 837 阅读 · 0 评论 -
设计模式(一)---单例模式
单例模式 英文名称:(Singleton Pattern) 定义:确保某一个类只用一个实例,而且自行实例化并向整个系统提供这个实例UML图:public class SingletonTest { public static void main(String[] args) { //通过Singleton对外暴漏的方法,进行实例化。并保证只有一个实例 Sing原创 2015-06-30 18:49:38 · 893 阅读 · 0 评论 -
6大设计原则(六)---开闭原则。
英文名称:Open Closed Principle,OCP 定义:一个软件实体如类、模块和函数应该对扩展开发,对修改关闭。 大意:一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。 开闭原则就是java世界里最基础的设计原则。 软件实体包括: * 项目或软件产品中按照一定的逻辑规则划分的模块 * 抽象和类 * 方法 一个实例:原创 2015-12-08 15:01:15 · 634 阅读 · 0 评论 -
6大设计原则(五)---迪米特法则
英文名称:Low of Demeter,LoD 定义:一个对象应该对其他对象有最少的了解。只与直接的朋友通信。 朋友关系:每个对象都必然会与其他对象有耦合关系,两个对象之间的耦合就称为朋友关系。 我的理解:迪米特法则定义的是类之间的关系要尽量低耦合,一个类中的朋友不要太多, 这样在后期代码维护或更改时需要修改的地方也就不会太多了。一个例子: 体育老师要求班长清点女生的人原创 2015-12-08 10:39:26 · 786 阅读 · 0 评论 -
6大设计模式(四)----接口隔离原则
接口隔离原则英文名称:Interface segregation Principle 先了解接口的分类: 1、实例接口(Object Interface):java中声明一个类,使用new关键字产生一个实例,它是一个类型的事物的描述这是一种接口。 例如 Person p = new Person();创建了一个对象p,Person类就是p的接口。 2、类接口(Clas原创 2015-12-07 16:49:46 · 683 阅读 · 0 评论 -
6大设计原则(三)---依赖倒置原则
英文名称(Dependence Inversion Principle ,DIP) 定义:高层模块不应该依赖低层模块,应该依赖其抽象,抽象不应该依赖其细节,细节应该依赖其抽象。这句话在java中的理解: 低层模块:具体细化的java类 高层模块:是由多个低层模块组成的。 抽象:指的是接口或者抽象类 依赖:存在类A的一个方法S,S传入的参数是另一个类B的实例,那么类A依赖原创 2015-12-07 10:44:50 · 519 阅读 · 0 评论 -
6大设计原则(二)---里氏替换原则
里氏替换原则英文名称(Liskov Substitution Principle,LSP): 定义:所有引用基类的地方必须能够透明地使用其子类的对象 我的理解: 父类出现的地方也可以用子类来替换,而子类出现的地方父类不一定能替换。 里氏替换原则的为继承定义的规范,包括4层含义 1、子类必须完全实现父类的方法 2、子类可以有自己的个性 3、覆盖或实现原创 2015-12-06 21:27:00 · 854 阅读 · 0 评论 -
6大设计原则(一)---单一职责原则
* 今天开始设计模式之旅。设计模式是一些有经验的前辈所总结出来的开发软件的经验。 * 设计模式包括6大设计原则和23种设计模式,随着软件开发的深入,后来又有了一些新的设计模式出现。 * 我目前还没有太多的开发经验,但是这也不妨碍我对设计模式的理解和学习,因为在基本了解一下设计模式之后 * 我在遇到开发难题时,就可以借鉴这些设计模式来熟练应用到场景中。 * 学习设计模式借鉴的书籍《设原创 2015-12-06 20:29:24 · 629 阅读 · 0 评论