设计模式
文章平均质量分 80
叫我小青
实现自己吹下的牛逼和许下的诺言,是这个世界上最开心的事情之一
展开
-
设计模式之适配器模式
GOF对适配器的定义是:将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能在一起工作的哪些类可以在一起工作。基本代码如下:public class Target { public void Request() { System.out.println("客户发起了普通的请求"); }}public class Adaptee { public v原创 2017-09-03 19:05:31 · 420 阅读 · 0 评论 -
设计模式之模板方法模式
GOF对模板方法模式的定义:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template使得子类可以不改变一个算法的结构而重新定义算法的某些特定步骤。先看下基本代码结构。public abstract class AbstractClass { public abstract void primitiveOperationA(); public abstract void prim原创 2017-09-13 21:55:28 · 410 阅读 · 0 评论 -
设计模式之总纲
一:各种模式之间的关系创建型模式包括抽象工厂模式,建造者模式,工厂方法模式,原型模式,单例模式共计5种。创建型模式抽象了实例化过程,帮助某个系统独立于如何创建、组合以及表示该系统所包含的对象。当系统向着更加依赖于对象复合而不是类的继承演变时,创建型模式就变得更为重要。创建型模式始终围绕两个点展开,创建什么,谁来创建,怎么创建以及什么时候创建。结构性模式包括桥街模式,装饰模式,组合模式,原创 2017-09-23 23:11:32 · 420 阅读 · 0 评论 -
设计模式之状态模式
GOF对状态模式的定义是:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。先看基本代码/** * * @author ricardo * @Time 上午12:31:24 * @Function:抽象状态类 * */public abstract class State { public String stateName; public abstr原创 2017-09-16 14:21:54 · 505 阅读 · 0 评论 -
设计模式之策略模式
GOF对策略模式的定义:策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。先看基本代码/** * * @author ricardo * @Time 下午10:55:43 * @Function:抽象策略类 * */public abstract class Strategy { public abstract void原创 2017-09-14 23:05:37 · 476 阅读 · 0 评论 -
设计模式之观察者模式
GOF对观察者模式的定义是:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生改变时,会通知所有的观察者对象,让他们自动更新自己。先来看基本代码。/** * * @author ricardo * @Time 下午9:31:55 * @Function:抽象的观察者模式 * */public abstract class Obs原创 2017-09-18 21:29:05 · 582 阅读 · 0 评论 -
设计模式之备忘录模式
GOF对备忘录模式的定义就是:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象回复到原先的状态。来看看备忘录模式的基本代码/** * * @author ricardo * @Time 下午8:07:41 * @Function: * 备忘录模式 */public class Origunator { private S原创 2017-09-18 21:56:52 · 595 阅读 · 0 评论 -
设计模式之中介者模式
GOF对中介者模式的定义是:用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式的互相引用,从而使其耦合松散,二期额可以独立地改变他们之间的交互。来看看基本代码/** * * @author ricardo * @Time 下午9:08:52 * @Function:抽象中介类 * */public abstract class Mediator { publ原创 2017-09-19 23:52:49 · 526 阅读 · 0 评论 -
设计模式之命令模式
GOF对命令模式的定义是:将一个请求封装成对象,从而使用户可用不同的请求对客户进行参数化,对请求排队或记录请求日志,并支持可撤销操作。先看基本代码//抽象命令public abstract class Command { protected Receiver receiver; public Command(Receiver receiver) { super(); thi原创 2017-09-20 00:17:25 · 544 阅读 · 0 评论 -
设计模式之享元模式
GOF对享元模式的定义:运用共享技术有效地支持大量细粒度的对象。下面给出基本代码/** * * @author ricardo * @Time 下午10:25:48 * @Function:抽象享元类 * */public abstract class Flyweight { public abstract void Operation(int i);}/** * *原创 2017-09-11 23:32:24 · 428 阅读 · 0 评论 -
设计模式之原型模式
在GOF对原型模式的定义是:用原型模式指定创建对象的种类,并且通过拷贝这些原型创建新的对象。所谓的原型模式其实就是依托一个已经实例化的对象去创建另外一个可以进行定制的对象,而不需要知道创建过程中的具体细节。原型模式的基本代码如下:/** * * @author ricardo * @Time 上午11:47:45 * @Function:抽象原型类 * */public a原创 2017-09-03 14:20:32 · 530 阅读 · 0 评论 -
设计模式之桥接模式
GOF对桥接模式的定义是:将抽象部分与它的实现部分分离,使它们都可以独立地变化。下面是基本代码的实现/** * * @author ricardo * @Time 下午4:31:53 * @Function:抽象的Implementor * */public abstract class Implementor { public abstract void Operation原创 2017-09-03 17:23:52 · 465 阅读 · 0 评论 -
设计模式之外观模式
GOF对外观模式的定义是:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易被使用。看下基本代码现在有ABC三个子系统类public class SubA { public void methodA() { System.out.println("子系统方法A被执行"); }}public class SubB { public原创 2017-09-12 21:31:09 · 435 阅读 · 0 评论 -
设计模式之建造者模式
GOF对建造者模式的定义是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程,可以创建不太的表示。我们先看看建造者的基本代码。/** * * @author ricardo * @Time 下午10:07:18 * @Function:抽象的构造者类 * */public abstract class Builder { public abstract void Bui原创 2017-08-29 23:52:21 · 499 阅读 · 0 评论 -
设计模式之解释器模式
解释器模式要解决的问题是,当一种特定类型的问题发生至足够高的频率后,那么就值得将此问题中的各个实例表述为一个简单预言中的句子,以此来构建一个解释器,这个解释器通过这些句子来解决该问题。GOF对解释器模式的定义是:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。先看基本代码//抽象表达式public abstract class Abstra原创 2017-09-23 22:46:58 · 461 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式曾经是一种最常见、最简单的设计模式,提供了一种顺序访问某个集合中所有元素的解决方案,而不用了解元素的底层操作。现在的新兴语言都将迭代器集成了进去,但是了解迭代器模式的实现对理解面向对象开发而言仍然尤其意义。GOF对迭代器模式的定义是:提供一种方法顺序访问聚合对象中的各个元素,而又不暴露该对象的内部表示。以筛选简历简单演示下。//抽象聚集类代码public abstract cl原创 2017-09-23 21:27:33 · 430 阅读 · 0 评论 -
单一职责原则
单一职责原则的定义比较简单——对于一个类,应该只有一个引起它变化的原因。当我们在进行软件开发的时候,经常会给已经设计的一个类新增各种各样的功能,或许是出于需求变更,或许是因为出于开发量的考量,一个类就在这样或那样的原因下变得逐渐臃肿庞大而且不方便管理。例如一个负责接受用户发来信息的类,也被设计为可以访问数据库将用户发来的信息进行记录等等,这意味着,当接收用户发送信息的结构变化或数据库持久层变化原创 2017-08-26 20:22:35 · 442 阅读 · 0 评论 -
里氏代换原则
里氏代换原则的定义是——子类型必须能够替换掉他们的父类型。在学习类的继承时有一个概念,如果子类继承自父类,那么子类就应该能以父类的身份出现。简单说,如果一个软件实体使用的是一个父类的话,那么就肯定适用其子类,并且该软件实体察觉不到父类对象和子类对象的区别。举个例子,有个很厉害的老木匠,周边的邻居都找他做家具,老木匠还有个大徒弟,不但学全了老木匠的本事还青出于蓝而胜于蓝。后来老木匠干不动了,原创 2017-08-27 00:40:53 · 2352 阅读 · 0 评论 -
开放-封闭原则
开放-封闭原则的定义是——程序的实体对象(模块、类、函数等)应该可以进行扩展,但不应该可以修改。开放-封闭原则具有两个特征:1.对于扩展是开放的;2.对于修改是闭合的。开放-封闭原则是面向对象开发中所有设计原则的核心。当经过实践,在面向对象编程时,如果要实现一个新的功能,添加一个新类来完成往往比修改现有的类更加方便和安全。这种思维就是所说的开放-封闭原则。所谓的添加而不是修原创 2017-08-27 01:59:34 · 747 阅读 · 0 评论 -
依赖倒转原则
依赖倒转原则的定义——程序的高层模块不应依赖于底层模块,但两者都应依赖于抽象;抽象不应该依赖于具体细节,而细节应该依赖于抽象。也就是说,面向对象编程应该针对接口编程而不是针对实现编程。在开发中使用依赖倒转原则需要遵循以下规范:每个类都尽量继承自接口或者抽象类,有了抽象才有可能依赖倒转变量显示的类型尽量(不是一定)是接口或者抽象类类尽量避免从具体类派生,当然如果是在项目维护阶段,基本原创 2017-08-27 03:08:55 · 500 阅读 · 0 评论 -
合成/聚合复用原则
合成/聚合复用原则的定义——尽量不要使用类继承,而尽量使用合成/聚合。合成/聚合都是关联关系的特殊种类,聚合表示比较“弱”的拥有关系,具体表现是甲对象中可以包括乙对象,但乙对象不是甲对象的一部分;合成则是一种比较“强”的拥有关系,体现的是严格的整体与部分之间的关系,并且整体与部分拥有相同的生命周期,比如:鱼和鱼群属于聚合,手臂和身体属于合成关系。优先使用对象的合成/聚合有助于保持系统的每个原创 2017-08-27 03:44:39 · 703 阅读 · 0 评论 -
迪米特法则
迪米特法则的定义——如果两个类之间不必直接通信,则这两个类不应该发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法,应该通过第三方来转发这个调用。迪米特法则也称为最少知识原则(talk only to your immediate friends),就是说一个对象应该尽可能少地了解其他对象。从而降低类之间的耦合,这样做的一个可能后果是系统中存在大量的中介类,这在一定程度上会增加系统的原创 2017-08-27 04:26:10 · 402 阅读 · 0 评论 -
设计模式之工厂方法模式
工厂,顾名思义在于对相关产品的批量添加,在开发中指将对象创建交给某个类,使得开发者不需要在意对象的创建。举个例子,小青我的面包店即将开业了。/** * * @author 小青 * @Time 下午12:30:34 * @Function:小青的面包店 * */public class First { public static void main(String[] args原创 2017-08-27 14:21:32 · 452 阅读 · 0 评论 -
设计模式之抽象工厂模式
小青的面包店开张了一段时间后,生意稳中有升,但是远远没达到小青的预期,因为不是所有人都吃面包,小青就想干脆也卖披萨试试,这时候,小青发现,如果按照制作面包的步骤来重新走一遍,确实满足了开放-封闭的原则,但是呢,从新建立Factory,投入有点太大了。小青觉得自己有必要再想想。这时候,小青突然醒悟过来,为什么生产面包的工厂不也生产披萨呢?大家原料都是差不多的,于是小青我开始重新设计修改代码。/*原创 2017-08-27 16:56:50 · 450 阅读 · 0 评论 -
设计模式之装饰者模式
GOF对装饰者模式的定义式 :动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类会更加灵活。先看基本代码。/** * * @author ricardo * @Time 下午9:11:18 * @Function:组件抽象类 * */public abstract class Component { public abstract void Operat原创 2017-09-05 22:27:23 · 504 阅读 · 0 评论 -
设计模式之单例模式
GOF对单例模式的定义:保证类仅有一个实例,并提供一个访问它的全局访问点。单例模式的的基本代码比较简单/** * * @author ricardo * @Time 下午10:40:11 * @Function:定义单例模式类 * */public class Singleton { private static Singleton singleton; private原创 2017-08-28 23:36:34 · 467 阅读 · 0 评论 -
设计模式之组合模式
GOF对组合模式的定义是:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。来看基本代码/** * * @author ricardo * @Time 下午10:33:52 * @Function:树中分支结点与叶子节点的抽象父类 * */public abstract class Component { protect原创 2017-09-06 23:56:34 · 425 阅读 · 0 评论 -
设计模式之访问者模式
GOF对访问者模式的定义是:表示一个作用于某对象结构中各元素的操作,它使了可以在不改变各元素的类的前提下,定义作用于这些元素的新操作。基本代码如下//抽象访问者public abstract class Visitor { public abstract void VisitConcreteElementA(ConcreteElementA A); public abstract voi原创 2017-09-23 15:51:09 · 505 阅读 · 0 评论 -
设计模式之职责链模式
GOF对职责链模式的定义是:使各个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合程度,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他们为之。先看基本代码//处理请示的接口public abstract class Handler { protected Handler successor; //设定被授权者 public void SetSucce原创 2017-09-23 16:22:43 · 415 阅读 · 0 评论 -
设计模式之代理模式
GOF对代理模式的定义是:为其他对象提供一种代理以控制对这个对象的访问。先看基本代码public abstract class Subject { public abstract void Request();}public class RealSubject extends Subject { @Override public void Request() { System.o原创 2017-09-12 22:16:32 · 408 阅读 · 0 评论