Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(尾篇一) (转)...

Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(尾篇一) (转)[@more@]

Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(尾篇一)XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

作者:Samir Bajaj

译者:荣耀

【译序:C#进阶文章。译者对Samir提供的C#例子进行了简单整理(作者提供的某些代码在译者的环境中无法通过编译),并编写了对应的C++示例,一并置于译注中,以便读者比对。译文中所有C#、C++程序调试环境均为Microsoft Visual Studio.NET 7.0 Beta2】

【译注:以下是state 模式完整示例

C#示例:

using System;

abstract class State

{

  public virtual void AddNickel(VendingMachine vm) { }

  public virtual void AddDime(VendingMachine vm) { }

  public virtual void AddQuarter(VendingMachine vm) { }

  protected virtual void ChangeState(VendingMachine vm, State s)

  {

    vm.ChangeState(s);

  }

}

class VendingMachine

{

  private State state;

  public VendingMachine()

  {

    Console.WriteLine("The Vending Machine is now online: product costs 25c");

  state = Start.Instance();

  }

  public void ChangeState(State to)

  {

  state = to;

  }

  public void Vend()

  {

  // 发饮料

    Console.WriteLine("Dispensing product...Thank you!");

  }

  public void AddNickel()

  {

    state.AddNickel(this);

  }

  public void AddDime()

  {

    state.AddDime(this);

  }

  public void AddQuarter()

  {

    state.AddQuarter(this);

  }

}

class Start : State

{

  private static State state = new Start();

  private Start()

  {

  }

  public static State Instance()

  {

  // singleton逻辑

    Console.WriteLine("Credit: 0c");

  return state;

  }

  public override void AddNickel(VendingMachine vm)

  {

    ChangeState(vm, Five.Instance());

  }

  public override void AddDime(VendingMachine vm)

  {

    ChangeState(vm, Ten.Instance());

  }

  public override void AddQuarter(VendingMachine vm)

  {

    vm.Vend();

  }

}

class Five : State

{

  private static State state = new Five();

  private Five()

  {

  } 

  public static State Instance()

  {

  // singleton 逻辑

    Console.WriteLine("Credit: 5c");

  return state;

  }

  public override void AddNickel(VendingMachine vm)

  {

    ChangeState(vm, Ten.Instance());

  }

  public override void AddDime(VendingMachine vm)

  {

    ChangeState(vm, Fifteen.Instance());

  }

  public override void AddQuarter(VendingMachine vm)

  {

    vm.Vend();

    ChangeState(vm, Start.Instance());  // no change returned :-)

  }

}

class Ten : State

{

  private static State state = new Ten();

  private Ten()

  {

  }

  public static State Instance()

  {

  // singleton 逻辑

    Console.WriteLine("Credit: 10c");

  return state;

  }

  public override void AddNickel(VendingMachine vm)

  {

    ChangeState(vm, Fifteen.Instance());

  }

  public override void AddDime(VendingMachine vm)

  {

    ChangeState(vm, Twenty.Instance());

  }

  public override void AddQuarter(VendingMachine vm)

  {

    vm.Vend();

    ChangeState(vm, Start.Instance());  // no change returned :-)

  }

}

class Fifteen : State

{

  private static State state = new Fifteen();

  private Fifteen()

  {

  }

  public static State Instance()

  {

    // singleton 逻辑

    Console.WriteLine("Credit: 15c");

  return state;

  }

  public override void AddNickel(VendingMachine vm)

  {

    ChangeState(vm, Twenty.Instance());

  }

  public override void AddDime(VendingMachine vm)

  {

    vm.Vend();

    ChangeState(vm, Start.Instance());

  }

  public override void AddQuarter(VendingMachine vm)

  {

    vm.Vend();

    ChangeState(vm, Start.Instance());  // no change returned :-)

  }

}

class Twenty : State

{

  private static State state = new Twenty();

  private Twenty()

  {

  }

  public static State Instance()

  {

  // singleton 逻辑

    Console.WriteLine("Credit: 20c");

  return state;

  }

  public override void AddNickel(VendingMachine vm)

  {

    vm.Vend();

    ChangeState(vm, Start.Instance());

  }

  public override void AddDime(VendingMachine vm)

  {

    vm.Vend();

    ChangeState(vm, Start.Instance());

  }

  public override void AddQuarter(VendingMachine vm)

  {

    vm.Vend();

    ChangeState(vm, Start.Instance());  // no change returned :-)

  }

}

class Application

{

  public static void Main()

  {

  int coin = 0;

  string input = null;

    VendingMachine vm = new VendingMachine();

  while (true)

  {

    Console.Write("Insert a coin (5, 10, 25): ");

    input = Console.ReadLine();

    coin = Int32.Parse(input);

    switch (coin)

  {

    case 5:

      vm.AddNickel();

    break;

    case 10:

      vm.AddDime();

      break;

    case 25:

      vm.AddQuarter();

    break;

    default:

    break;

  }

  }

  }

}

/*以下是某次运行时输出结果:

The Vending Machine is now online: product costs 25c

Credit: 0c

Insert a coin <5, 10, 25>: 5

Credit: 5c

Insert a coin <5, 10, 25>: 10

Credit: 15c

Insert a coin <5, 10, 25>: 5

Credit: 20c

Insert a coin <5, 10, 25>: 5

Dispensing product...Thank you!

*/


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10790690/viewspace-957067/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10790690/viewspace-957067/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值