《java与模式》学习系列——策略模式

 

一、策略(Strategy)模式的结构图

策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使他们可以互相替换,策略模式使得算法可以在不影响到客户端的情况下发生变化。

其结构图如下:

其中如果所有的具体策略类都有一些共有的行为,应当把这些公有的行为放到共同的抽象策略角色Strategy类里面。这时候抽象策略角色必须要用java抽象类实现。

二、策略模式在java中的应用

       使用策略模式的例子主要在Java.awtSwing库中看到。

       AWT中的LayoutManager

       Java.awt类库需要在运行期间动态的由客户端决定一个Container对象怎样排列它所有的GUI构件。Java语言提供了几种不同的排列方式,包装在不同的类里:BorderLayoutFlowLayoutGridLayoutGridBagLayoutCardLayout。其类图如下:

Swing中的Border

在任何一个Swing构件上都可以画上边框(Border),比如panelbutton等,而Swing库提供了很多的边框类型,包括bevellinetitled以及CompoundBorder类等,Swing构件的基类是JComponent类,而这个类负责为Swing构件画上边框。

JComponent类实现了paintBorder()方法,并且保持一个私有的对边框对象的引用。由于Border是一个接口而不是具体类,因此,这个引用可以指向任何实现了Border借口的边框对象。其类图如下:

三、在什么情况下使用策略模式

1、如果在一个系统里面有许多类,他们之间的区别仅仅在于他们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

2、一个系统需要动态的在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法里面,而这些具体算法类都是一个抽象算法类的子类。换言之,这些具体算法类均有统一的接口,由于多态性原则,客户端可以选择使用任何一个具体算法类,并只持有一个数据类型是抽象算法类的对象。

3、一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复杂的和只与算法有关的数据。

4、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。使用策略模式可以避免使用难以维护的多重条件选择语句。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值