设计模式(四)

4 篇文章 0 订阅
2 篇文章 0 订阅
[size=large][color=black][b]13.访问者模式[/b][/color][/size]
访问者模式也称为Visitor模式,使用这种模式后可以在不修改已有程序结构的前提下,通过额外添加“访问者”来对已有代码的功能实现提升。表示一个作用于某对象结构中的各元素的操作。它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。


构成访问者模式的角色如下:
1.访问者角色(Visitor):为该对象结构中的具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。
2.具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明操作。
3.元素角色(Element):定义一个Accept操作,它以一个访问者为参数。
4.具体元素角色(Concrete Element):实现由元素角色提供的Accept操作。
5.对象结构角色(Object Structure):这是使用访问者模式必备的角色。它要具备以下特征—能枚举它的元素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是一个复合(组合模式)或是一个集合,如一个列表或一个无序集合。


[img]http://dl2.iteye.com/upload/attachment/0126/3059/f62d1898-2889-3bd0-99f1-c29fc7de892d.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3265/1c8f570d-abf1-37d3-bb60-0af1396cd841.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3267/61b58139-2a4f-37bc-a2ae-5dc860d4f621.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3269/ee656740-384c-3211-acd5-0390702c8b15.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3271/3bd1ed9d-0182-303e-8212-3f1ece0d1358.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3273/9816f275-6743-33e9-abf6-4073c24459c3.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3275/418c9288-2c36-3d50-a813-8ee2050039f8.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3277/e988d3dc-1213-34a6-9681-8c018f3cae39.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3279/6e5f89bf-132b-3d41-a2e9-ded687f10568.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3281/ba3e90a3-aab1-36fb-969f-2261f80ecd5c.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3283/7ea40883-da26-3234-ab0d-a8e245c17468.png[/img]


适用访问者模式的情况
(1)一个对象结构包含很多类对象,它们有不同的接口,而我们想对这些对象实施一些依赖于其具体类的操作。
(2)需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而我们想避免让这些操作“污 染”这些对象的类。Visitor使得我们可以将相关的操作集中起来,定义在一个类中。(3)当对象结构被很多应用共享时,Visitor模式让每个应用仅包含需要用到的操作。
(4)定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。


[size=large][color=black][b]14.策略模式 [/b][/color][/size]
策略模式又被称为算法族模式,就是定义了不同的算法族,并且相互之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。通常,策略模式适合于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。


[img]http://dl2.iteye.com/upload/attachment/0126/3285/5c1be7a5-c1d6-3655-ae88-b5adc2767c05.png[/img]


在策略模式中有如下几个对象:
1.环境对象:该类中实现了对象策略中定义的接口或者抽象类的引用。
2.抽象策略对象:它可由接口或抽象类来实现。
3.具体策略对象:它封装了实现不同功能的不同算法。


“刘备回荆州问题”刘备要到江东娶老婆,走之前诸葛亮给伴郎赵云三个锦囊妙计,说是按天机拆开能解决棘手问题。先说说这个场景的三要素:三个妙计,一个锦囊,一个赵云。妙计是亮哥给的,妙计放在锦囊里,俗称就是锦囊妙计。那赵云就是一个干活的人,从锦囊里取出妙计,执行,然后获胜。如果用Java 来表示这个过程,则具体实现流程如下所示。


[img]http://dl2.iteye.com/upload/attachment/0126/3289/9363cda3-fb41-30fb-8175-cc0744c83cb6.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3291/7f5968de-55d0-3263-a576-32ba33fc214b.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3293/5506eabe-8c15-371b-b0df-d20ab031ecbf.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3297/4abcc6e8-4b0e-3ff7-9605-f4a9e03919ea.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3299/15de2e25-b859-3760-94ee-76a36cf66ec5.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3301/e677da32-e112-3ef1-a6f8-5e8f2893fc7d.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0126/3303/5f083f26-306b-3a28-9ba0-ed7f49eb2612.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值