1. 配置文件
<
configuration
>
< configSections >
< sectionGroup name ="spring" >
< section name ="context" type ="Spring.Context.Support.ContextHandler, Spring.Core" />
< section name ="objects" type ="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</ sectionGroup >
</ configSections >
< spring >
< context >
< resource uri ="config://spring/objects" />
</ context >
< objects >
<!-- Default Implement -->
< object name ="algHello" type ="CsharpTrainer.Strategy.Hello.EngHello, CsharpTrainer.Strategy" >
</ object >
<!-- Extended Implement -->
<!-- <object name="algHello" type="CsharpTrainer.Strategy.Hello.ChnHello, CsharpTrainer.Strategy">
</object> -->
</ objects >
</ spring >
...
</ configuration >
< configSections >
< sectionGroup name ="spring" >
< section name ="context" type ="Spring.Context.Support.ContextHandler, Spring.Core" />
< section name ="objects" type ="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</ sectionGroup >
</ configSections >
< spring >
< context >
< resource uri ="config://spring/objects" />
</ context >
< objects >
<!-- Default Implement -->
< object name ="algHello" type ="CsharpTrainer.Strategy.Hello.EngHello, CsharpTrainer.Strategy" >
</ object >
<!-- Extended Implement -->
<!-- <object name="algHello" type="CsharpTrainer.Strategy.Hello.ChnHello, CsharpTrainer.Strategy">
</object> -->
</ objects >
</ spring >
...
</ configuration >
2. 算法接口
策略接口
public
interface IStrategy
{
void Execute();
}
{
void Execute();
}
算法1
public
class EngHello : IStrategy
{
public void Execute()
{
Console.WriteLine( " Hello, World! ");
}
}
{
public void Execute()
{
Console.WriteLine( " Hello, World! ");
}
}
算法2
public
class ChnHello : IStrategy
{
public void Execute()
{
Console.WriteLine( " 你好, 世界! ");
}
}
{
public void Execute()
{
Console.WriteLine( " 你好, 世界! ");
}
}
3. Spring调用端
public
class HelloAlgorithm
{
public static void SayHello()
{
// 从config文件中取得程序集信息
IApplicationContext context = ConfigurationManager.GetSection( " spring/context ") as IApplicationContext;
// 调用方法
IStrategy alg = context.GetObject( " algHello ") as IStrategy;
alg.Execute();
}
{
public static void SayHello()
{
// 从config文件中取得程序集信息
IApplicationContext context = ConfigurationManager.GetSection( " spring/context ") as IApplicationContext;
// 调用方法
IStrategy alg = context.GetObject( " algHello ") as IStrategy;
alg.Execute();
}
4. 运行和替换
运行程序,结果是Hello, World
如果我们把算法配置换成
<object name="algHello" type="CsharpTrainer.Strategy.Hello.ChnHello, CsharpTrainer.Strategy">
</object>
结果将是: 你好, 世界