当前位置:编程学习 > C#/ASP.NET >>

策略模式(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# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,