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

原创 2002年01月09日 10:43:00

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!

*/

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

Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(尾篇二)作者:Samir Baja...
  • optimizer
  • optimizer
  • 2002年01月09日 10:43
  • 557

Software Architecture Patterns

Software ArchitecturePatterns Understanding Common Architecture Patterns and When to Use Them Full v...
  • dotphoenix
  • dotphoenix
  • 2016年09月08日 16:34
  • 2407

Head First Design Patterns影印版和中文版

深入浅出设计模式(影印版)http://www.oreilly.com.cn/book.php?bn=7-5641-0165-2Head First设计模式(中文版)http://www.oreill...
  • ddkiller
  • ddkiller
  • 2007年10月15日 08:42
  • 742

Patterns Of Enterprise Application Architecture

1, 事务脚本 vs. 领域模型(Transaction Script vs. Domain Model)作者基于功能的复杂性来区分两种模式的使用时机,却忽略了另外一个因素:功能的增加领域模型将功能和...
  • chelsea
  • chelsea
  • 2005年02月18日 08:31
  • 4014

Applying Domain-Driven Design and Patterns(ADDDP) With examples in C# and .NET

Applying Domain-Driven Design and Patterns(ADDDP) With examples in C# and .NET是在Martin Fowler的PoE...
  • shanyou
  • shanyou
  • 2007年07月06日 21:08
  • 641

设计模式 - Design Patterns

设计模式四人组 GoF(“四人帮”,又称Gang of Four,即Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人)1. 起源Go...
  • u010297957
  • u010297957
  • 2016年03月29日 23:20
  • 1049

C++版的Head First Design Pattern

       前 些天从sourceforge上down下一个C++版的Head First Design Pattern,一直都没有仔细看过,也不知道HeadFirstDesignPattern是一...
  • iinel
  • iinel
  • 2007年11月16日 10:13
  • 1580

java设计模式大全 Design pattern samples in Java(最经典最全的资料)

Design pattern samples in Java.Build status:IntroductionDesign patterns are formalized best practice...
  • changemyself
  • changemyself
  • 2015年06月19日 13:10
  • 10390

java设计模式(Design Patterns)

设计模式(Design Patterns)                                   ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、...
  • zhihui1017
  • zhihui1017
  • 2015年11月09日 10:54
  • 1403

Design Patterns: Solidify Your C# Application Arch

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 04:07
  • 583
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(尾篇一)
举报原因:
原因补充:

(最多只允许输入30个字)