姓名 : 刘自强
班级 : 信息18班
学号 : 2014517
1.模式定义。
软件模式分为三大类:创建型模式(creational pattren)、结构型模式(structural patterm)和行为型模式(beh**ioral pattern),都是用于解决软件设计开发上的特定问题。本文主要结合面向对象程序设计思想说明结构型模式中的一种基本的设计模式——**设计模式(proxy pattern)。
结构型设计模式是关注于如何将类和对象组合成更大的结构。结构型模式是使用继承来组合接口或者实现的。而在结构型设计模型中7种设计模式都是以对象的适配器模式为起源,如图1-1所示。
图1-1结构型设计模式图。
2.模式分析。
本文针对**设计模式进行论述,**设计模式(proxy pattern),是软件设计模式中的一项基本技巧,在**设计模式中,有两个对象参与处理同一请求,接收的请求可以由**对象委托给真实对象进行处理,**对象控制请求的访问,它在客户应用程序与真实目标对象之间起到了一个中介桥梁的作用。**设计模式使用对象聚合代替继承,可以有效地降低了软件模块之间的耦合度。
在**设计模式中,一共可以关系到的角色有以下三大类。
1)抽象角色:声明真实对象和**对象的共同接口。
2)真实角色:真正处理客户请求的目标对象。
3)**角色:**对象角色内部包含有真实对象的引用,从而**对象可以将请求转为真实对象处理。同时,**对象在执行真实对象操作的前后还可以添加附加操作。
3. 实例分析。
下面举一个例子对**设计模式进行分析,以消费者购买红酒为例,红酒厂商可以在工厂生产红酒,红酒厂商也可以把红酒批发给**商,而**商还可以把批发来的红酒卖给客户(消费者)。因此消费者只需要和红酒**商打交道就行了,不必到红酒生产厂商那里购买。**商如果有,就可以直接买,没有则可以通过**商进行购买。
从生产厂商到**经销商再到消费者,红酒的**可以说是一路向上看的,打个比方,一瓶红酒出厂**10元,到了**商这里,由于运费、店面租金、营业税等因素影响,需要提高50%,而且**商可能还要从中获得一定的利润,这样还要在提高50%,如此下来,红酒的**卖到消费者手中可能就要20元。那么消费者购买红酒的过程如下:
1)找到红酒的**商;
2)**商有客户想买的红酒,则直接卖给客户,否则下订单到红酒生产厂家;
3)红酒生产厂家生产红酒批发给**商。
这个过程比较容易理解。如果**商存在客户想买的红酒,就可以直接交易:如果**商没有客户想要的红酒,则下订单通知红酒生产厂家,然后,红酒生产厂家生产红酒批发给**商,最后,再由**商卖红酒给客户。
静态关系如图所示。
如图红酒**商静态关系图。
从红酒**商的静态关系图中,我们可以清晰地看到,客户只与**商之间进行购买交易,而不与实际的红酒生产厂家发生任何关系。
4. 模式实现。
根据以上论述,下面根据红酒**商静态关系图对模式进行实现。
打开eclipse;新建j**a工程“proxydemo”,然后创建一下包结构:
1)新建“包结构,用于存放真实的红酒生产厂商角色:
2)新建“包结构,用于存放红酒**商角色。
4.1 创建红酒生产厂商。
1 红酒工厂接口——iredwine
首先,创建生产红酒接口“iredwine”,该接口含有两个方法:生产红酒和销售红酒。内容如下所示:
package 把红酒接口放在此包中。
//定义一个红酒接口,包括两个方法:一个是生产红酒。另一个是销售红酒方法。
public interface iredwine
@override
//红酒销售方法实现。
public void sell()
4.2 到红酒工厂购买红酒。
红酒工厂已经建立起来了,现在你可以直接到工厂买到想要的红酒了。我们先来看看直接到工厂买红酒的过程吧!创建client客户端应用程序,内容如下所示;
package 将此客户端程序放在此包中。
import
import 将红酒接口和真实红酒工厂所在的包分别代入此包中,。
/定义一个客户端类,,主应用程序。
public class client
此工程结构如图4-1所示。
图4-1 工程结构图。
运行应用程序,程序结果如下所示;
红酒工厂生产红酒。。。
红酒工厂销售红酒。。
红酒工厂一实现生产红酒和销售红酒的方法。
红酒工厂生产红酒。。。
红酒工厂销售红酒。。
红酒工厂二实现生产红酒和销售红酒的方法。
此时我们的应用程序可以让红酒工厂生产红酒进而销售红酒了。那么接下来编写红酒**商程序。
4.3 创建红酒**商。
到红酒生产工厂购买红酒显然是不能实现的做法,接下来,我们创建红酒**商类“redwineproxy”,在该类中包含有红酒工厂的对象引用,如果**类能够解决(有客户买红酒),就直接与客户交易,不能解决则交给真实对象红酒工厂处理。其具体内容如下所示:
package 此包是存红酒**商类和实现红酒工厂接口方法。
import
/红酒**商实现红酒工厂的接口并且实现红酒接口中生产红酒与销售红酒的方法。
public class redwineproxy implements iredwine
//**商生产红酒方法(**商不生产红酒,从真正的生产工厂拿酒销售)
@override
public void product()
elseelse{
这是核发电红酒**商。
从上面可以看到,在红酒**商中,构造方法将真实的红酒生产厂商对象实例引入,在红酒**商的生产和销售红酒的方法中增加了**商的判断,如果是合法的红酒**商就可以进行红酒生产和销售,否则将不能进行生产和销售。
4.4 到红酒**商处购买红酒。
下面将可以看到client应用程序是如何调用红酒**商的。修改client应用程序,具体内容如下:
package 将此客户端程序放在此包中。
高级软件工程
人人网 测试分析报告。编写测试文档的目的是验证人人网的正确性 可移植性 健壮性 可修改性,为了人人网含有更少的错误,方便以后维护 调试,使 运行的更加稳定,让用户能使用一个满意 稳定 不易出问题的 制定本测试说明文档,预期的读者包含会使用人人网的人员。通过对 的测试,找出其中的bug,对 进行修改和...
高级软件工程
高级软件工程 试题。2014级工程硕士用 一 单项选择题 请将正确答案的字母写在题号前面的括号内。每小题3分,共30分 a 1 确定待开发软件的功能要求 性能要求和运行环境约束的阶段是 a 需求分析 b 总体设计 c 详细设计 d 测试。d 2 在结构化分析方法中,数据字典定义了数据流图中的各个元素...
高级软件工程
一 判断 每题1分 1 如果绝对将soft完全包给第三方公司开发。错 不可能,因为第三方不清楚要做什么。2 有3项目标大概了解便可以开发,写程序。错 还没极限图,没有需求 2个极限包括极限编程的思想和传统软件工程思想 3 成功的软件项目,可执行的程序是唯一的交付。错 软件 programe date...