策略模式
策略模式:strategy。
1.该模式适用于某一事物具有多套算法,并且算法相互替换的情形。
2.基本思路。利用开发语言的特性,将特定算法独立出来,在超类中添加独立算法接口的引用。具体在实现该超类的子类中,负责将动作接口指向具体的(接口)实现类。从而达到只修改局部,不影响全局的目的。
3.核心思想。将易改动部分独立出来,缩小改动范围,利用开发语言特性中的多态、接口。面向接口编程,调动时动态加载动作算法实例。
附:具体实例。
public class Smoker { private cigarette _cigarette; public Smoker(cigarette c) { this._cigarette = c; } public void SetCigarette(cigarette c) { this._cigarette = c; } public void Smoke() { if (_cigarette != null) { _cigarette.Smoke(); } } } public class OutSide : cigarette { public void Smoke() { Console.WriteLine("在户外,可以抽烟"); } } public class Indoor : cigarette { public void Smoke() { Console.WriteLine("在市内,不能抽烟"); } } public class PetrolStation : cigarette { public void Smoke() { Console.WriteLine("在加油站,严禁抽烟"); } } /// <summary> /// 香烟 /// </summary> public interface cigarette { /// <summary> /// 抽烟 /// </summary> void Smoke(); }
调用代码:
Smoker smoker = new Smoker(new OutSide()); smoker.Smoke(); smoker.SetCigarette(new Indoor()); smoker.Smoke(); smoker.SetCigarette(new PetrolStation()); smoker.Smoke();
结果:
在户外,可以抽烟
在市内,不能抽烟
在加油站,严禁抽烟