第 1 章 策略模式【Strategy Pattern】
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,
//嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子
//的。
//先说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是小亮同志给的,妙计是放置在锦囊
//里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用 JAVA 程序
//怎么表现这个呢?我们先看类图:
namespace CeLuoMoShi
{
//首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口
public interface IStrategy
{
void Option();
//每个锦囊妙计都是一个可执行的算法
}
public class GivenGreenLight : IStrategy
{
public void Option()
{
Console.WriteLine("求吴国太开个绿灯,放行!");
}
}
/// <summary>
///
/// </summary>
public class BackDoor : IStrategy
{
//找乔国老帮忙,使孙权不能杀刘备
public void Option()
{
Console.WriteLine("找乔国老帮忙,让吴国太给孙权施加压力");
}
}
/// <summary>
///
/// </summary>
public class BlockEnemy : IStrategy
{
//求吴国太开个绿灯
public void Option()
{
Console.WriteLine("孙夫人断后,挡住追兵");
}
}
public class Context
{
private IStrategy straegy;
public Context(IStrategy strategy)
{
this.straegy = strategy;
}
//使用计谋了,看我出招了
public void operate()
{
this.straegy.Option();
}
}
public class ZhaoYun
{
// *问题来了:赵云实际不知道是那个策略呀,他只知道拆第一个锦囊,
// *而不知道是BackDoor 这个妙计,咋办? 似乎这个策略模式已经把计谋名称写出来了
// *
// * 错!BackDoor 、GivenGreenLight 、BlockEnemy 只是一个代码,你写成first 、second、
//third ,没人会说你错!
// *
// * 策略模式的好处就是:体现了高内聚低耦合的特性呀,缺点嘛,这个那个,我回去再查查
// */
static void Main(string[] args)
{
Console.WriteLine("//刚刚到吴国的时候拆第一个");
Context context;
context = new Context(new BackDoor());
context.operate();
Console.WriteLine("//刘备乐不思蜀了,拆第二个了");
context = new Context(new GivenGreenLight());
context.operate();
Console.WriteLine("//孙权的小兵追了,咋办?拆第三个");
context = new Context(new BlockEnemy());
context.operate();
Console.Read();
}
}
/*
* 然后就是赵云雄赳赳的揣着三个锦囊,拉着已步入老年行列的、还想着娶纯情少女的、色迷迷的刘老
爷子去入赘了,嗨,还别说,小亮的三个妙计还真是不错,瞅瞅:
*/
}