23种应用场景举例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1【装饰模式应用场景举例】.....................................错误!未定义书签。2【策略模式应用场景举例】.....................................错误!未定义书签。3【代理模式应用场景举例】.....................................错误!未定义书签。4【外观模式应用场景举例】.....................................错误!未定义书签。5【抽象工厂模式应用场景举例】.................................错误!未定义书签。6【观察者模式应用场景举例】...................................错误!未定义书签。7【建造者模式应用场景举例】...................................错误!未定义书签。8【原型模式应用场景举例】.....................................错误!未定义书签。9【工厂方法模式应用场景举例】.................................错误!未定义书签。10【模板方法模式应用场景举例】................................错误!未定义书签。

1【装饰模式应用场景举例】

比如在玩“极品飞车”这款游戏,游戏中有对汽车进行喷涂鸦的功能,而且这个喷涂鸦是可以覆盖的,并且覆盖的顺序也影响到最后车身的显示效果,假设现在喷涂鸦具有2种样式:(1)红色火焰(2)紫色霞光如果使用“继承父类”设计这样的功能,那么类图就像如下的这样:

从图中可以看到使用继承来实现这种功能,并且是2种涂鸦样式,就需要创建4个子类,如果喷涂鸦有3种,4种呢这种情况就是典型中学课程学习过的“排列与组合”,那简直就是“Head First设计模式”书中讲的“类爆炸”。

显然继承“奥迪汽车类”的这个办法是无效,而且是非常徒劳,繁琐的。

那么如何才能以“灵活”,“顺序敏感”这样的需求来实现这样的功能呢

【装饰模式解释】

类型:结构模式

动态的对一个对象进行功能上的扩展,也可以对其子类进行功能上的扩展。

【装饰模式UML图】

【装饰模式-JAVA代码实现】

新建一个抽象汽车父类:

package car_package;

public abstract class car_parent {

rint_tyre_line();

}

}

让车跑起来,并且具有更换轮胎样式的功能:

package main_run;

import;

import;

import;

控制台打印出:

是一个长轮胎痕迹,但在程序中可以使用代码:(tyre_long_implement);来对轮胎的样式进行不同的替换,可以替换成短轮胎痕迹的汽车轮胎,这样在不

更改Car类的前题下进行了不同轮胎样式的改变,轮胎和轮胎之间可以互相替换,这就是策略模式。

3【代理模式应用场景举例】

比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提供卖车的服务”给有需求的人士。从面向对象的方面考虑,“销售汽车的代理”也是一个对象,那么这个对象也具有一定的状态,在软件项目中这个对象也具有管理财务进销存的基本功能,那么在设计时就要以面向OOP编程的思想来考虑软件的类结构,这个销售汽车的代理也是一个类了。

【代理模式解释】

类型:结构模式

对一些对象提供代理,以限制那些对象去访问其它对象。

【代理模式UML图】

【代理模式-JAVA代码实现】

新建一个买车的接口:

新建一个people人类,具有买车的行为,所以实现接口buy_car_package:

people类不能拥有车,必须经过proxy代理类的认证,符合条件之后才可以拥有车辆,新建一个代理,这个代理类来考察当前的people是否有资格进行买车:

最后创建一个客户端,用来模拟买车的行为:

程序运行结果如下:

这样people就不可能自由的拥有车辆,必须经过proxy的认证之后才可以。

而代理模式在GOF四人帮的介绍中大体有4种使用情景:

(1)远程代理。典型的就是客户端与webservice使用的情况,客户端由于是针对OOP编程,而不是针对webservice中的方法进行编程,所以得在客户端模拟一下webservice的环境,用proxy来对webservice进行包装,这样就可以使用proxy代理类来远程操作webservice了。

(2)虚拟代理。比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有100MB,在打开文件时不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用proxy来进行大图片的打开。

(3)安全代理。其实也就是本例中所举的买车的例子,金钱不够不可以买车!

(4)智能指引。比如在访问一个对象时检测其是否被锁定等情况。

4【外观模式应用场景举例】

比如在玩“极品飞车”这款游戏,你只需要等待的就是倒计时到0时以最快的车速冲到第一名,但游戏者根本没有想过在车冲出去之前要做哪些工作,比如挂档,离合器,油箱检测,调整方向等等的微操作,将这些微操作封装起来变成一个接口就是外观模式了。在WEB开发中的MVC分层架构就是典型的一个外观模式,每一层将操作的具体内容隐藏起来,保留一个接口供上层调用。

【外观模式解释】

类型:结构模式

为子系统中的一组接口提供一个一致的interface接口界面。

【外观模式UML图】

相关文档
最新文档