定义 桥接模式(BridgePattern):是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 用途 在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。以画不同颜色的圆为例,实现共分五步: 创建桥接实现接口。 publicinterfaceDrawAPI{ voiddrawCircle(intradius,intx,inty); } 创建实现了DrawAPI接口的实体桥接实现类。RedCircle、GreenCircle publicclassRedCircleimp...

定义 外观模式(FacadePattern):提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。其实就是为了方便客户的使用,把一群操作,封装成一个方法。 示例 在这个示例中,我们有三个子系统类:CPU,Memory和HardDrive。每个类都执行系统的不同功能,例如处理数据,加载内存和读取硬盘数据。 然后,我们创建了一个ComputerFacade类,它封装了这三个子系统类,并提供了一个简单的start()方法,客户端可以使用该方法启动计算机。在start()方法中,我们按照正确的顺序调用每个子系统的方法,以确保计算机正确启动。 最后,在客户端代...

定义 主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建5个对象来画出20个分布于不同位置的圆来演示这种模式。由于只有5种可用的颜色,所以color属性被用来检查现有的Circle对象。 用途 在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。以随机获取多种形状为例,共分四步: 创建一个接口。 publicinterfaceShap...

定义 一个类代表另一个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。可以理解为内存中没有这个对象就创建,有就直接返回这个对象。 代理模式使用代理对象完成用户请求,屏蔽用户对真实对象的访问。 角色组成 抽象(Subject)角色,该角色是真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题。 代理(ProxySubject)角色,也叫做委托类、代理类,该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作。 真实(RealSubject)角色:该角色也叫做被委托角色...

定义 观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。UML结构图如下: 其中,Subject类是主题,它把所有对观察者对象的引用文件存在了一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供了一个接口,可以增加和删除观察者对象;Observer类是抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己;ConcreteSubject类是具体主题,将有关状态存入具体观察者对象,在具体主题内部状态改变时,给所有登记过的观察者发出...

模板模式:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板模式主要由抽象模板(AbstractTemplate)角色和具体模板(ConcreteTemplate)角色组成。 抽象模板(AbstractTemplate):定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤;定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操...

策略模式(StrategyPattern)属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 其主要目的是通过定义相似的算法,替换ifelse语句写法,并且可以随时相互替换。 策略模式主要由这三个角色组成,环境角色(Context)、抽象策略角色(Strategy)和具体策略角色(ConcreteStrategy)。 环境角色(Context):持有一个策略类的引用,提供给客户端使用。 抽象策略角色(Strategy):这是一个抽象角色,通常由一个接口或抽象类实现。此角色...

Java和.Net编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。 概述 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 把在元素之间游走的责任交给迭代器,而不是聚合对象。主要解决:不同的方式来遍历整个整合对象。 示例 以使用迭代器打印名字为例,总共分三步: 创建接口: publicinterfaceIterator{ publicbooleanhasNext(); publicObjectnext(); } publicinterfaceContainer{ publicIter...

装饰者模式(decoratorpattern):动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 装饰模式以对客户端透明的方式拓展对象的功能,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展。 比如设置FileInputStream,先用BufferedInputStream装饰它,再用自己写的LowerCaseInputStream过滤器去装饰它。 InputStreamin=newLowerCaseInputStream(newBufferedInputStream(newFileInputSt...

原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。 以获取多种形状为例,共分四步: 1、创建一个实现了Cloneable接口的抽象类。Shape(implementsCloneable) publicabstractclassShapeimplementsCloneabl...

工厂模式是用来封装对象的创建。工厂模式有三种,它们分别是简单工厂模式,工厂方法模式以及抽象工厂模式,通常我们所说的工厂模式指的是工厂方法模式。 下面分别介绍下这三种工厂模式。 简单工厂模式 简单工厂模式的定义:定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口。 由于只有一个工厂类,所以工厂类中创建的对象不能太多,否则工厂类的业务逻辑就太复杂了,其次由于工厂类封装了对象的创建过程,所以客户端应该不关心对象的创建。 适用场景: (1)需要创建的对象较少。 (2)客户端不关心对象的创建过程。 下面看一个具体的实例。 创建一个可以绘制不同形状的绘图工具,可以绘制...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~