Agile Principles,Patterns,And Practices in C# 之Strategy Pattern
2008-08-12 16:24
375 查看
from:吕震宇
Code
// Strategy pattern -- Structural example
using System;
// "Strategy"
abstract class Strategy
{
// Methods
abstract public void AlgorithmInterface();
}
// "ConcreteStrategyA"
class ConcreteStrategyA : Strategy
{
// Methods
override public void AlgorithmInterface()
{
Console.WriteLine("Called ConcreteStrategyA.AlgorithmInterface()");
}
}
// "ConcreteStrategyB"
class ConcreteStrategyB : Strategy
{
// Methods
override public void AlgorithmInterface()
{
Console.WriteLine("Called ConcreteStrategyB.AlgorithmInterface()");
}
}
// "ConcreteStrategyC"
class ConcreteStrategyC : Strategy
{
// Methods
override public void AlgorithmInterface()
{
Console.WriteLine("Called ConcreteStrategyC.AlgorithmInterface()");
}
}
// "Context"
class Context
{
// Fields
Strategy strategy;
// Constructors
public Context( Strategy strategy )
{
this.strategy = strategy;
}
// Methods
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
/**//// <summary>
/// Client test
/// </summary>
public class Client
{
public static void Main( string[] args )
{
// Three contexts following different strategies
Context c = new Context( new ConcreteStrategyA() );
c.ContextInterface();
Context d = new Context( new ConcreteStrategyB() );
d.ContextInterface();
Context e = new Context( new ConcreteStrategyC() );
e.ContextInterface();
}
}
Code
// Strategy pattern -- Structural example
using System;
// "Strategy"
abstract class Strategy
{
// Methods
abstract public void AlgorithmInterface();
}
// "ConcreteStrategyA"
class ConcreteStrategyA : Strategy
{
// Methods
override public void AlgorithmInterface()
{
Console.WriteLine("Called ConcreteStrategyA.AlgorithmInterface()");
}
}
// "ConcreteStrategyB"
class ConcreteStrategyB : Strategy
{
// Methods
override public void AlgorithmInterface()
{
Console.WriteLine("Called ConcreteStrategyB.AlgorithmInterface()");
}
}
// "ConcreteStrategyC"
class ConcreteStrategyC : Strategy
{
// Methods
override public void AlgorithmInterface()
{
Console.WriteLine("Called ConcreteStrategyC.AlgorithmInterface()");
}
}
// "Context"
class Context
{
// Fields
Strategy strategy;
// Constructors
public Context( Strategy strategy )
{
this.strategy = strategy;
}
// Methods
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
/**//// <summary>
/// Client test
/// </summary>
public class Client
{
public static void Main( string[] args )
{
// Three contexts following different strategies
Context c = new Context( new ConcreteStrategyA() );
c.ContextInterface();
Context d = new Context( new ConcreteStrategyB() );
d.ContextInterface();
Context e = new Context( new ConcreteStrategyC() );
e.ContextInterface();
}
}
相关文章推荐
- Agile Principles, Patterns, and Practices in C#
- Agile Principles,Patterns,And Practices in C# 之保龄球积分
- Agile Principles,Patterns,And Practices in C# 之OCP源代码
- Agile Principles, Patterns, and Practices in C#
- 《Agile Principles, Patterns, and Practices in C#》(chap 1 - chap 10)读后感
- Agile Principles,Patterns,And Practices in C# 之敏捷软件开发宣言
- Applying Domain-Driven Design and Patterns(ADDDP) With examples in C# and .NET
- [Study Note] Patterns and Practices in NHibernate
- 期待已久的一本电子书出来了:Applying Domain-Driven Design and Patterns: With Examples in C# and .NET
- Data Structures And Algorithms With Object-Oriented+Design+Patterns in C#
- Applying Domain-Driven Design and Patterns: With Examples in C# and .NET
- 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
- Working with PDF files in C# using PdfBox and IKVM
- LZW and Huffman Compression Algorithms Implemented in C#
- Thread and Sync In C# (C#中的线程与同步)
- List of Microsoft patterns and practices for Application Architecture and Design
- Command Patterns in C#
- Use HttpUtility and NameValueCollection in c# of Visual Studio 2010
- Secure Coding Best Practices for Memory Allocation in C and C++