策略模式(Strategy)
UML类图:
代码示例:
[csharp]
//策略类
public abstract class Animal
{
public abstract void Run();
}
public class Dog : Animal
{
public override void Run()
{
Console.WriteLine("Dog was running...");
}
}
public class Cat : Animal
{
public override void Run()
{
Console.WriteLine("Cat was running...");
}
}
//Context类,维护一个Animal实例
public class AnimalContext
{
public Animal AnimalInstance { get; set; }
public AnimalContext(Animal animal)
{
this.AnimalInstance = animal;
}
}
//策略类
public abstract class Animal
{
public abstract void Run();
}
public class Dog : Animal
{
public override void Run()
{
Console.WriteLine("Dog was running...");
}
}
public class Cat : Animal
{
public override void Run()
{
Console.WriteLine("Cat was running...");
}
}
//Context类,维护一个Animal实例
public class AnimalContext
{
public Animal AnimalInstance { get; set; }
public AnimalContext(Animal animal)
{
this.AnimalInstance = animal;
}
}
策略与简单工厂结合:
[csharp]
//策略类
public abstract class Animal
{
public abstract void Run();
}
public class Dog : Animal
{
public override void Run()
{
Console.WriteLine("Dog was running...");
}
}
public class Cat : Animal
{
public override void Run()
{
Console.WriteLine("Cat was running...");
}
}
//Context类,维护一个Animal实例
public class AnimalContext
{
public Animal AnimalInstance { get; set; }
public AnimalContext(string animalType) //工厂类与Context类合并,构造函数参数string类型
{
switch(animalType)
{
case "Dog":
this.AnimalInstance = new Dog();
break;
case "Cat":
this.AnimalInstance = new Cat();
break;
default:
this.AnimalInstance = null;
break;
}
}
}
//策略类
public abstract class Animal
{
public abstract void Run();
}
public class Dog : Animal
{
public override void Run()
{
Console.WriteLine("Dog was running...");
}
}
public class Cat : Animal
{
public override void Run()
{
Console.WriteLine("Cat was running...");
}
}
//Context类,维护一个Animal实例
public class AnimalContext
{
public Animal AnimalInstance { get; set; }
public AnimalContext(string animalType) //工厂类与Context类合并,构造函数参数string类型
{
switch(animalType)
{
case "Dog":
this.AnimalInstance = new Dog();
break;
case "Cat":
this.AnimalInstance = new Cat();
break;
default:
 
补充:软件开发 , C# ,