Java设计模式
文章平均质量分 81
从设计原则到设计模式的讲解,并附带各大开源软件中常用的设计模式
keep_trying_gogo
千万不要在最能吃苦的年纪选择安逸,与君共勉。
展开
-
Java与设计模式(一)设计模式概述
一设计模式的由来设计模式从何而来软件工程中的设计模式二设计模式是什么what三为什么用设计模式why四怎样学习设计模式how一、设计模式的由来设计模式从何而来在介绍设计模式的起源之前,我们先要了解一下模式的诞生与发展。与很多软件工程技术一样,模式起源于建筑领域,毕竟与只有几十年历史的软件工程相比,已经拥有几千年沉淀的建筑工程有太多值得学习和借鉴的地方。 那原创 2018-01-15 14:29:50 · 283 阅读 · 0 评论 -
Java与设计模式(二)类之间的关系
概述一依赖关系Dependence二关联关系Association三聚合Aggregation四组合Composition五继承Generalization六实现Implementation七总结概述1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。2) 在系统中,每个类具有一定的职责,职责指的是类原创 2018-01-15 17:39:17 · 307 阅读 · 0 评论 -
Java与设计模式(三)设计原则--单一职责原则
一定义二单一职责优点一、定义单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。单一职责原则定义如下: 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模原创 2018-01-15 17:54:30 · 232 阅读 · 0 评论 -
Java与设计模式(四)设计原则--里氏代换原则
一定义一、定义里氏代换原则由2008年图灵奖得主、美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出。其严格表述如下:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1代换o2时,程序P的行为没有变化,那么类型S是类型T的子类型。这个定义比较拗口且难以理解,因原创 2018-01-15 18:47:49 · 242 阅读 · 0 评论 -
Java与设计模式(五)设计原则--依赖倒置原则
一定义一、定义如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。依赖倒转原则是Robert C. Martin在1996年为“C++Reporter”所写的专栏Engineering Notebook的第三篇,后来加入到他在2002年出版的经典著作“Agile Software Development, Pri原创 2018-01-15 18:54:34 · 257 阅读 · 0 评论 -
Java与设计模式(六)设计原则--接口隔离原则
一定义一、定义接口隔离原则定义如下: 接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干原创 2018-01-15 19:05:14 · 256 阅读 · 0 评论 -
Java与设计模式(七)设计原则--迪米特法则(最少知道原则)
一定义二代码示例一、定义迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目。迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下: 迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。如果一个系统原创 2018-01-15 19:27:36 · 482 阅读 · 0 评论 -
Java与设计模式(八)设计原则--开闭原则
一定义一、定义开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。开闭原则由Bertrand Meyer于1988年提出,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类原创 2018-01-15 19:46:13 · 220 阅读 · 0 评论 -
Java与设计模式(九)创建型--简单工厂模式
一需求二简单工厂模式概述简单工厂模式流程简单工厂模式定义简单工厂模式中的角色简单工厂模式代码示例三需求优化四 简单工厂模式总结主要优点主要缺点使用场景一、需求比如我想开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,例如柱状图、饼状图、折线图等,那我们可以这样写。代码如下:package demo.com.test.shejimosh原创 2018-01-17 15:39:26 · 217 阅读 · 0 评论 -
Java与设计模式(十)创建型--工厂方法模式
一需求二工厂方法模式概述工厂方法模式定义工厂方法模式中的角色工厂方法模式代码示例三需求优化四工厂方法模式总结主要优点主要缺点适用场景简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现增加新产品而不影响已有代码?一、需求原创 2018-01-17 16:57:52 · 204 阅读 · 0 评论 -
Java与设计模式(十一)创建型--抽象工厂模式
一需求二产品等级结构与产品族三抽象工厂模式概述抽象工厂模式定义抽象工厂模式中的角色抽象工厂模式代码示例四抽象工厂模式总结主要优点主要缺点适用场景工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个原创 2018-01-17 19:31:14 · 241 阅读 · 0 评论 -
Java与设计模式(十二)创建型--单例模式
一单例模式的动机二类图三代码示例四单例模式的几种实现方式懒汉式线程不安全懒汉式线程安全饿汉式双检锁双重校验锁DCL即 double-checked locking登记式静态内部类枚举使用经验五单例模式总结主要优点主要缺点适用场景六单例模式与垃圾回收一、单例模式的动机对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——原创 2018-01-17 20:14:37 · 251 阅读 · 0 评论 -
Java与设计模式(十三)创建型--建造者模式
一建造者模式概述二建造者模式定义三建造者模式角色四建造者模式代码示例五建造者模式总结主要优点主要缺点适用场景没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低的创建型模式。建造者模原创 2018-01-19 14:34:43 · 276 阅读 · 0 评论 -
Java与设计模式(十四)创建型--原型模式
一原型模式概述二原型模式角色三原型模式总结主要优点主要缺点适用场景一、原型模式概述在使用原型模式时,我们需要首先创建一个原型对象,再通过复制这个原型对象来创建更多同类型的对象。试想,如果连孙悟空的模样都不知道,怎么拔毛变小猴子呢?原型模式的定义如下: 原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原创 2018-01-19 14:50:18 · 230 阅读 · 0 评论 -
Java与设计模式(十五)结构型--适配器模式
一概述二定义三对象适配器模式角色四适配器模式总结主要优点类适配器模式优点对象适配器模式优点主要缺点适用场景一、概述适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adapte原创 2018-01-22 19:10:31 · 198 阅读 · 0 评论 -
Java与设计模式(十六)结构型--桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。原创 2018-01-23 13:48:09 · 171 阅读 · 0 评论 -
Java与设计模式(十七)结构型--过滤器模式
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。原创 2018-01-23 13:50:09 · 214 阅读 · 0 评论 -
Java与设计模式(十八)结构型--组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。原创 2018-01-23 13:54:03 · 204 阅读 · 0 评论 -
Java与设计模式(十九)结构型--装饰器模式
一定义二解决的问题三模式中的角色四装饰模式的类图五JDK涉及到的设计模式六装饰模式总结优点缺点适用场景一、定义动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。原创 2018-01-23 15:08:09 · 256 阅读 · 0 评论 -
Java与设计模式(二十)结构型--外观模式
一定义二解决的问题三模式中的角色四模式解读五模式总结优点缺点适用场景外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。一、定义提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易访问。二原创 2018-01-23 16:00:32 · 200 阅读 · 0 评论 -
Java与设计模式(二十一)结构型--享元模式
一定义二解决的问题三模式中的角色四模式解读五JDK涉及到的设计模式六模式总结优缺点适用场景享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。一、定义运用共享技术有效地支持大量细粒度的对象。二、解决的问题在有大原创 2018-01-23 16:35:27 · 195 阅读 · 0 评论 -
Java与设计模式(二十二)结构型--代理模式
一定义二解决的问题三模式中的角色四模式解读五JDK涉及到的设计模式六模式总结与其他模式比较优点缺点适用场景在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。一、定义为其他对象提供一种代理以控制对这个对象的访问。二、解决的问题在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象原创 2018-01-23 18:05:55 · 172 阅读 · 0 评论 -
Java与设计模式(二十三)行为型--策略模式
一定义二解决的问题三模式中的角色四模式解读五JDK涉及到的设计模式六模式总结优点缺点适用场景在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。原创 2018-01-24 19:07:13 · 178 阅读 · 0 评论 -
Java与设计模式(二十四)行为型--模板模式
一定义二模式中的角色三模式解读四JDK涉及到的设计模式五模式总结优点缺点适用场景在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。一、定义定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以原创 2018-01-25 21:15:52 · 202 阅读 · 0 评论 -
Java与设计模式(二十五)行为型--观察者模式
一概述二解决的问题三模式中的角色四模式解读五JDK涉及到的设计模式六模式总结优点缺点适用场景当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式一、概述有时被称作发布/订阅模式,观察者模式定义了对象之间的一对多的依赖关系,这样一来,当一个对象改变状态时,它的原创 2018-01-26 16:50:54 · 226 阅读 · 0 评论 -
Java与设计模式(二十六)行为型--迭代器模式
一概述二 解决的问题三模式中的角色四模式解读五JDK涉及到的设计模式六模式总结优点缺点适用场景一、概述迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。二、 解决的问题遍历整个整合对象三、模式中的角色1、抽象迭代器(Iterator):定义出遍历元素所需的接口。2、具体迭代器(ConcreteIter原创 2018-01-26 17:30:03 · 217 阅读 · 0 评论 -
Java与设计模式(二十七)行为型--责任链模式
一概述二解决的问题三模式中的角色四模式解读五JDK涉及到的设计模式六模式总结优点缺点适用场景一、概述责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。二、解决的问题如果有多个对象都有可能接受请求,可以避免请求发送者与接收者耦合在一起。三、模式中的角原创 2018-01-26 18:45:48 · 242 阅读 · 0 评论 -
Java与设计模式(二十八)行为型--命令模式
一概述二解决的问题三模式中的角色四模式解读五JDK涉及到的设计模式六模式总结优点缺点适用场景一、概述命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。二、解决的问题用于“行为请求者”与原创 2018-01-26 19:32:11 · 209 阅读 · 0 评论