常见的10种设计模式

上传人:jiups****uk12 文档编号:90662371 上传时间:2019-06-14 格式:DOCX 页数:11 大小:316.38KB
返回 下载 相关 举报
常见的10种设计模式_第1页
第1页 / 共11页
常见的10种设计模式_第2页
第2页 / 共11页
常见的10种设计模式_第3页
第3页 / 共11页
常见的10种设计模式_第4页
第4页 / 共11页
常见的10种设计模式_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《常见的10种设计模式》由会员分享,可在线阅读,更多相关《常见的10种设计模式(11页珍藏版)》请在金锄头文库上搜索。

1、设计模式1简单工厂模式简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。工厂(Creator)角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。抽象(Product)角色简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品(Concrete Product)角色简单工厂模式所创建的具体实例对象优缺点在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可

2、以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。 2工厂方法模式工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可

3、以使系统在不修改具体工厂角色的情况下引进新的产品。抽象工厂(Creator)角色:工厂方法模式的核心,任何工厂类都必须实现这个接口。具体工厂(Concrete Creator)角色:抽象工厂的一个实现,负责实例化产品对象。抽象(Product)角色:工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品(Concrete Product)角色:工厂方法模式所创建的具体实例对象工厂方法模式与工厂模式的比较: 工厂方法模式与简单工厂模式在结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。 工厂方法模式之所以有一个别名叫多态性工

4、厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。 3抽象工厂模式抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。抽象工厂(Creator)角色抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂

5、类都必须实现这个接口。具体工厂( Concrete Creator)角色具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。抽象(Product)角色抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品(Concrete Product)角色抽象模式所创建的具体实例对象总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。4单例模式单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。其实,GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局

6、访问方法。 为什么要使用单例模式呢?在应用系统开发中,我们常常有以下需求:- 在多个线程之间,比如servlet环境,共享同一个资源或者操作同一个对象- 在整个程序空间使用全局变量,共享资源- 大规模系统中,为了性能的考虑,需要节省对象的创建时间等等。因为Singleton模式可以保证为一个类只生成唯一的实例对象,所以这些情况,Singleton模式就派上用场了。单例模式实现1.饿汉式。2.懒汉式。3.双重检查。5.代理模式Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的

7、接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。代理模式的结构代理模式的角色和职责subject(抽象主题角色): 真实主题与代理主题的共同接口。RealSubject(真实主题角色):定义了代理角色所代表的真实对象。 Proxy(代理主题角色):含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真是主题对象之前或者之后执行某些操作,而不是单纯返回真实的对象。动态代理1) InvocationHandler 接口2) invoke方法3) Proxy.newProxyInstance();6.命令模式 Command模式也叫命

8、令模式 ,是行为设计模式的一种。Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。命令模式的应用场景在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。- 整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。- 调用前后需要对调用参数进行某些处理。- 调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。 命令模式的结构命令模式

9、的角色和职责CommandCommand抽象类。ConcreteCommandCommand的具体实现类。Receiver需要被调用的目标对象。Invorker通过Invorker执行Command对象。7.策略模式Strategy模式也叫策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法的切换 。1) 策略模式的结构2) 策略模式的角色和职责Strategy: 策略(算法)抽象。ConcreteStrategy各种策略(算法)的

10、具体实现。Context策略的外部封装类,或者说策略的容器类。根据不同策略执行不同的行为。策略由外部环境决定。 3) 策略模式的优点:1. 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免重复的代码。2. 策略模式提供了可以替换继承关系的办法。继承可以处理多种算法或行为。如果不是用策略模式,那么使用算法或行为的环境类就可能会有一些子类,每一个子类提供一个不同的算法或行为。但是,这样一来算法或行为的使用者就和算法或行为本身混在一起。决定使用哪一种算法或采取哪一种行为的逻辑就和算法或行为的逻辑混合在一起,从而不可能再独

11、立演化。继承使得动态改变算法或行为变得不可能。3. 使用策略模式可以避免使用多重条件转移语句。多重转移语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重转移语句里面,比使用继承的办法还要原始和落后。4) 策略模式的缺点有:1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。2. 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用

12、。换言之,可以使用享元模式来减少对象的数量。8.外观模式 Facade模式也叫外观模式,也称门面模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。外观模式的结构外观模式的角色和职责Facade为调用方定义简单的调用接口。Clients调用者。通过Facade接口调用提供某功能的内部类群。Packages功能提供者。指提供功能的类群(模块或子系统)。9.桥接模式Bridge 模式又叫做桥接模式,是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚

13、合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。桥接模式的结构桥接模式的角色和职责Client Bridge模式的使用者Abstraction 抽象类接口(接口或抽象类); 维护对行为实现(Implementor)的引用Refined Abstraction Abstraction子类Implementor 行为实现类接口 (Abstraction接口定义了基于Implementor接口的更高层次的操作)ConcreteImplementor Impl

14、ementor子类10.观察者模式Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。观察者模式的结构观察者模式的角色和职责Subject(被观察者)被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。ConcreteSubject被观察者的具体实现。包含一些基本的属性状态及其他操作。Observer(观察者)接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。ConcreteObserver观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。观察者模式的典型应用- 侦听事件驱动程序设计中的外部事件- 侦听/监视某个对象的状态变化- 发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,通知邮件列表中的订阅者;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号