设计模式
wangxp423
这个作者很懒,什么都没留下…
展开
-
策略模式
一,定义策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。二,模式结构 这个模式涉...原创 2018-05-17 10:23:22 · 11859 阅读 · 0 评论 -
桥接模式
一,定义桥接模式:将抽象部分与它的实现部分分离,使他们都可以独立的变化。什么叫抽象与它的实现分离,这并不是说,让抽象类和派生类分离,因为这没有任何意义,实现指的是抽象类和它的派生类用来实现自己的对象。说白了就是实现系统可能有多种角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少他们之间的耦合。 二,示例按照不同的手机品牌,运行不同的手机软件。...原创 2018-06-04 18:33:45 · 1972 阅读 · 0 评论 -
原型模式
一,定义原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象在创建另外一个可定制的对象,而且不需要知道任何创建的细节, 二,实现实现Cloneable接口: Cloneable接口的作用是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,...原创 2018-05-24 11:32:03 · 11586 阅读 · 0 评论 -
建造者模式(生成器模式)
一,定义建造者模式:也叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。二,结构 Builder:为创建一个Product对象的各个部件指定抽象接口 ConcreteBuilder:具体建造者,实现Builder接口,构造和装备各个部件, Product:具体的产品角色 Director:指挥者,可根据用户需求构建对象,她是构建一个使用...原创 2018-05-29 11:16:16 · 9466 阅读 · 0 评论 -
职责链模式
一,定义职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 二,示例实现一个加薪层层审批的例子 /** * @类描述:申请 */public class Request { private String requestType; //请求类型 ...原创 2018-06-05 16:29:20 · 1624 阅读 · 0 评论 -
命令模式
一,定义命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。 Command类,用来声明执行操作的接口 ConcreteCommand类,将一个接受者对象绑定于一个动作,调用接受者相应的操作,以实现execute invoker类,要求该命令执行这个请求。 receiver类,知道如何实施与执行一个请求相关的...原创 2018-06-05 14:46:43 · 1728 阅读 · 0 评论 -
中介者模式
一,定义中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 中介者模式可以将系统的网状结构变成以中介者为中心的星型结构。 Colleague叫做抽象同事类 ConcreteColleague是具体同事类,没个具体同事只知道自己的行为,而不了解其他同事类的情况,而他们却都认识中介对象。 M...原创 2018-06-05 17:59:30 · 1563 阅读 · 0 评论 -
享元模式
一,定义享元模式:运用共享技术有效地支持大量细粒度的对象。 享元模式可以避免大量非常相似类的开销,在程序设计中,有时需要生成大量细粒度的类实例来表示数据,如果能发现这些实例除了几个参数外基本相同,有时就能够大幅度地减少需要实例化的类的数量,如果能把这些参数移到类实例的外面,在方法调用时将他们传递进来,就可以通过共享大幅度减少单个实例的数目。public class Test { ...原创 2018-06-06 11:44:17 · 1625 阅读 · 0 评论 -
观察者模式
一,定义观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同事监听某一个主题对象,这个主题在状态发生该变时,会通知所有观察者对象,使他们能够自动更新自己。二,结构 Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个接口实现,他把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者,抽象提供一个接口,可以增加和删除观察者对象。Obse...原创 2018-05-30 15:21:52 · 8510 阅读 · 0 评论 -
解释器模式
一,定义解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 常见的解释器模式比如:正则表达式,我们给定一个正则的语法表示,当我们输入一串字符串,其中的解释器就会告诉我们这段字符串是否匹配该正则表达式。二,示例实现一个音乐解释器。 我们的规则: O表示音阶 “O 1”表示低音阶 ,“O 2”表示中音阶 “O 3”表...原创 2018-06-06 16:04:56 · 1583 阅读 · 0 评论 -
访问者模式
一,定义访问者模式:表示一个作用于某对象结构中各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式适用于数据结构相对稳定的系统,他把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。二,示例我们要实现一个男女在不同情况下的对比展示情况。因为只有男女,所以结构相对稳定//人 抽象类 接受一个行为public...原创 2018-06-06 17:26:54 · 1590 阅读 · 0 评论 -
Java设计模式汇总(全)
示例代码:https://github.com/wangxp423/ExerciseDesignmodel设计模式六大原则:单一职责原则开放-封闭原则里氏替换原则依赖倒置原则接口隔离原则迪米特法则设计模式(23种)下面列一下各种设计模式对应代码的包名:简单工厂模式 –> simplefactory工厂方法模式 –> methodfactory抽象工厂模式...原创 2018-06-06 18:02:01 · 2801 阅读 · 0 评论 -
状态模式
一,定义状态模式:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。二,示例实现一个根据时间变化,工作状态发生变化的示例 public abstract class State { //根据不...原创 2018-05-31 11:47:24 · 7423 阅读 · 0 评论 -
适配器模式
一,定义适配器模式:将一个类的接口转换成客户希望的另外一个接口,adapter模式使得原本又有接口不兼容而不能一起工作的哪些类可以一起工作。简单的说,就是需要的东西就在面前,但却不能使用,而短时间内无法改造他,于是我们就想办法适配它。在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。由于类适配器模式通过多重继承对一个接口与另外一个接口进行匹配,而C#,VB....原创 2018-06-01 10:59:55 · 6011 阅读 · 0 评论 -
单例模式
一,定义单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个最好的办法就是,让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。 二,示例public class Singleton { private static Si...原创 2018-06-04 16:37:12 · 2081 阅读 · 0 评论 -
迭代器模式
一,定义迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。迭代器模式的实用价值远不如他的学习价值大,因为很多语言已经把他封装好了。 二,示例/** * @类描述:抽象迭代器接口 */public abstract class Iterator { public abstract Object first(); publ...原创 2018-06-04 15:52:30 · 3479 阅读 · 0 评论 -
组合模式
一,定义组合模式,将对象组合成树形结构以表示”部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 Component:为组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为,声明一个接口用户访问和管理Component的子部件Leaf:表示组合中叶节点对象,叶节点没有子节点。Composite:定义有枝节点行为,用来存储子部件,在Compo...原创 2018-06-04 11:53:55 · 4204 阅读 · 0 评论 -
单一职责原则
一,定义单一职责原则(SRP),就一个类来说,应该只有一个引起他变化的原因。二,问题由来类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。三,解决方案遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风...转载 2018-05-17 12:52:01 · 12072 阅读 · 0 评论 -
开放-封闭原则
一,定义开放-封闭原则:是说软件实体(类,模块,函数等等)应该是可扩展的,但是不可修改。[ASD]这个原则其实是有两个特征,一个是说,对于扩展是开放的(Open for extension),对于更改是封闭的(Closed for modification)二,问题和方案问题由来: 在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引...原创 2018-05-18 10:53:46 · 14702 阅读 · 0 评论 -
依赖倒置原则
一,定义1,高层模块不应该依赖底层模块,两个都应该依赖抽象 2,抽象不应该依赖细节,细节应该依赖抽象二,问题和解决方案问题由来: 类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。解决方案: 将类A修改为依赖接口I...原创 2018-05-18 12:55:29 · 12131 阅读 · 0 评论 -
里氏替换原则
一,由来“里氏替换原则”是由 Barbara Liskov女士在1988面发表的,具体的数学定义比较复杂,你可以查相关资料。它的白话翻译就是:一个软件实体如果使用的是一个父类的话,那么一定适用于子类,而且他察觉不出父类对象和子类对象的区别,也就是说,在软件里面,把父类替换成他的子类,程序的行为没有变化。二,定义里氏替换原则:子类必须能够替换掉他们的父类继承包含这样一层含义:父类...原创 2018-05-18 14:57:04 · 12586 阅读 · 0 评论 -
迪米特法则
一,定义迪米特法则,也叫最少知识原则(LoD),如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。迪米特法则还有一...转载 2018-05-18 15:48:45 · 12589 阅读 · 4 评论 -
接口隔离原则
一,定义客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。二,问题和方案问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。解决方案: 将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。三,举例...转载 2018-05-18 16:23:37 · 12354 阅读 · 0 评论 -
装饰模式
一,定义装饰模式,动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 或者说:在不必改变原类文件和原类使用的继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是用装饰来包裹真实的对象来实现。二,角色抽象构件角色(Component):给出一个接口,以规范准备接收附加责任的对象。 具体构件角色(ConcreteComponent)...原创 2018-05-21 15:25:30 · 11831 阅读 · 0 评论 -
模板方法模式
一,定义模板方法模式,定一个操作中的算法的骨架,而将一些步骤延迟到到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 二,实例我们将实现一个,测试题类(选择题),由学生来答题的例子public abstract class TestPaper { //测试题 public void TestQuestionA(){ ...原创 2018-05-25 14:37:21 · 10751 阅读 · 1 评论 -
代理模式
一,定义代理模式:为其他对象提供一种代理以控制对这个对象的访问。二,分类1,远程代理:就是为一个对象在不同地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。 2,虚拟代理:是根据需要创建开销很大的对象,通过他来存放实例化需要很长时间的真是对象。 3,安全代理:用来控制真实对象访问时的权限。 4,智能指引:是指当调用真实对象时,代理处理另外一些事。三...原创 2018-05-22 11:03:24 · 10446 阅读 · 0 评论 -
简单工厂模式
一,定义: 工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工厂模式)工厂方法模式(也叫多形性工厂)抽象工厂模式(也叫工具箱)简单工厂模式...原创 2018-05-16 14:45:01 · 14070 阅读 · 1 评论 -
工厂方法模式
一,定义工厂方法模式:是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现。二,实例我们以简单工厂模式中的运算实例来继续作为例子。 以下是工厂方法模式的接口图,明显可以看出和简单工厂模式的区别 publ...原创 2018-05-23 11:16:48 · 10958 阅读 · 0 评论 -
外观模式
一,定义外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二,角色1,外观(Facade)角色 :客户端可以调用这个角色的方法。此角色知晓相关子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。2,子系统(SubSystem)角色:可以同时有一个或者多个子系统。...原创 2018-05-28 12:45:14 · 10081 阅读 · 0 评论 -
抽象工厂模式
一,定义抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品对象。它有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,可以派生出多个具体工厂类,每个具体工厂类可以创建多个具体产品类的实例。二,实例我们...原创 2018-05-23 16:11:27 · 10934 阅读 · 0 评论 -
备忘录模式
一,定义备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。 Originator(发起人):负责创建一个备忘录memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的那些状态Memento(备忘录):负责存储Or...原创 2018-06-01 15:01:38 · 5910 阅读 · 0 评论