1700480351
设计模式之禅 33.3 包装模式群PK
1700480352
1700480353
我们讲了这么多的设计模式,大家有没有发觉在很多的模式中有些角色是不干活的?它们只是充当黔首作用,你有问题,找我,但我不处理,我让其他人处理。最典型的就是代理模式了,代理角色接收请求然后传递到被代理角色处理。门面模式也是一样,门面角色的任务就是把请求转发到子系统。类似这种结构的模式还有很多,我们先给这种类型的模式定义一个名字,叫做包装模式(wrapping pattern)。注意,包装模式是一组模式而不是一个。包装模式包括哪些设计模式呢?包装模式包括:装饰模式、适配器模式、门面模式、代理模式、桥梁模式。下面我们通过一组例子来说明这五个包装模式的区别。
1700480354
1700480355
33.3.1 代理模式
1700480356
1700480357
现在很多明星都有经纪人,一般有什么事他们都会说:“你找我的经纪人谈好了”,下面我们就看看这一过程怎么模拟。假设有一个追星族想找明星签字,我们看看采用代理模式怎么实现。代理模式是包装模式中的最一般的实现,类图如图33-6所示。
1700480358
1700480359
1700480360
1700480361
1700480362
图33-6 追星族找明星签字
1700480363
1700480364
类图很简单,就是一个简单的代理模式,我们来看明星的定义,明星接口如代码清单33-29所示。
1700480365
1700480366
代码清单33-29 明星接口
1700480367
1700480368
public interface IStar{
1700480369
1700480370
//明星都会签名
1700480371
1700480372
public void sign();
1700480373
1700480374
}
1700480375
1700480376
明星只有一个行为:签字。我们来看明星的实现,如代码清单33-30所示。
1700480377
1700480378
代码清单33-30 明星
1700480379
1700480380
public class Singer implements IStar{
1700480381
1700480382
public void sign(){
1700480383
1700480384
System.out.println(“明星签字:我是XXX大明星”);
1700480385
1700480386
}
1700480387
1700480388
}
1700480389
1700480390
经纪人与明星应该有相同的行为,比如说签名,虽然经纪人不签名,但是他把你要签名的笔记本、衣服、CD等传递过去让真正的明星签字,经纪人如代码清单33-31所示。
1700480391
1700480392
代码清单33-31 经纪人
1700480393
1700480394
public class Agent implements IStar{
1700480395
1700480396
//定义是谁的经纪人
1700480397
1700480398
private IStar star;
1700480399
[
上一页 ]
[ :1.70048035e+09 ]
[
下一页 ]