策略模式
来源:互联网 发布:动物建模软件 编辑:程序博客网 时间:2024/06/05 15:18
策略模式
策略模式(Strategy),定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。策略模式主要解决在有多种相似算法的情景下,使用if…else所带来的复杂和难以维护。
小孩喜欢花花绿绿各种不同的色彩,以小孩穿不同颜色的衣服为例。有一个抽象的衣服选择器接口,派生出红色衣服选择器、白色衣服选择器、蓝色衣服选择器,衣服类持有衣服选择器的引用。
这里涉及到3个角色:
- 环境角色:持有抽象策略的引用。
- 抽象策略角色:通常是一个接口或抽象类,在这里就是衣服选择器。
- 具体策略角色:封装了相关算法,这里指的是不同颜色的衣服选择器。
- 衣服选择器
public interface ClothesChooser { void dress();}
- 红色衣服选择器
public class RedClothesChooser implements ClothesChooser { @Override public void dress() { System.out.print("dress red clothes"); }}
- 白色衣服选择器
public class WhiteClothesChooser implements ClothesChooser { @Override public void dress() { System.out.print("dress white clothes"); }}
- 蓝色衣服选择器
public class BlueClothesChooser implements ClothesChooser { @Override public void dress() { System.out.print("dress blue clothes"); }}
- 衣服
public class Clothes { public ClothesChooser clothesChooser; public Clothes(ClothesChooser clothesChooser) { this.clothesChooser = clothesChooser; } public void dress() { clothesChooser.dress(); }}
- 客户端测试类
public class Client { public static void main(String[] args) { ClothesChooser clothesChooser = new RedClothesChooser(); Clothes clothes = new Clothes(clothesChooser); clothes.dress(); }}
运行结果:
dress red clothes
在这里,具体策略即红色、白色、蓝色的衣服选择器,有一个特点,就是它们之间是平等的,并且它们做的是同一件事情,都是选择一件衣服来穿,不同之处在于所选择衣服的颜色不同。
策略模式的优点在于算法可以自由切换,并且避免了多重条件判断。
但是策略模式的缺点也很明显,策略类会增多,并且所有的策略类都需要对外暴露,这就意味着客户端必须知道各种算法的区别。
1 0
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 关于在图库中图片进行多选
- 《REWORK》摘录及感想----理想世界和现实世界真的无法平衡吗?
- 专治win各种110120140.dll丢失
- eclipse 安装 scala
- 数据结构实验:连通分量个数——并查集
- 策略模式
- 网络攻防之——nmap工具的使用
- Intent详解
- CCF201509-2-日期计算
- Map 综述(一):彻头彻尾理解 HashMap
- codevs1001 舒适的路线 贪心枚举+并查集
- PHP 实现断点续传的原理和方法
- 盒子模型
- [第二类斯特林数 组合计数] 省选模拟赛 2 B. 两弹一星 missile