2006年12月26日星期二

设计模式-工厂模式

前言:工厂模式属于创建模式,提供创建对象的接口。代理模式属于结构模式。

为何使用Factory模式?
因为工厂模式相当于创建实例对象的new,而创建实例对象时有时初始化要做很多工作,把很多工作放入一个方法中,有背于面向对象编程的原则。面向对象的封装(Encapsulation)和分派(Delegation)要求尽量将长的代码分派切割,将每段再封装,减少代码的耦合性。这样就可以分散风险。

抽象工厂
工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory).
这两个模式区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了,如上面工厂方法中是创建一个对象Sample,如果我们还有新的产品接口Sample2.
这里假设:Sample有两个concrete类SampleA和SamleB,而Sample2也有两个concrete类Sample2A和SampleB2
那么,我们就将上例中Factory变成抽象类,将共同部分封装在抽象类中,不同部分使用子类实现

设计模式-代理模式

前言:理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣。

Proxy 是代理的意思,即在出发点到目的地之间有一个中间层。
设计模式中定义是:为其他对象提供一种代理以控制对这个对象的访问

为什么使用Proxy?
1、授权机制,不同级别用户对某个对象有不同权限。如Jive论坛系统通过FourmProxy代理来控制游客和注册用户对论坛的访问权限。
2、某个客户端不能直接操纵某个对象,但又必须和它有所互动。如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片。
原则是开销很大的对象,先用代理来代替它。

如何使用Proxy?
Jive论坛系统为例,访问论坛系统的用户有多种类型:注册普通用户 论坛管理者 系统管理者 游客,注册普通用户才能发言;论坛管理者可以管理他被授权的论坛;系统管理者可以管理所有事务等,这些权限划分和管理是使用Proxy完成的.
Forum是Jive的核心接口,在Forum中陈列了有关论坛操作的主要行为,如论坛名称 论坛描述的获取和修改,帖子发表删除编辑等.
在ForumPermissions中定义了各种级别权限的用户:

因此,Forum中各种操作权限是和ForumPermissions定义的用户级别有关系的,作为接口Forum的实现:ForumProxy正是将这种对应关系联系起来.比如,修改Forum的名称,只有论坛管理者或系统管理者可以修改,代码如下:
而DbForum才是接口Forum的真正实现,以修改论坛名称为例:


凡是涉及到对论坛名称修改这一事件,其他程序都首先得和ForumProxy打交道,由ForumProxy决定是否有权限做某一样事情,ForumProxy是个名副其实的"网关","安全代理系统"。