简单工厂模式和策略模式对比

一:相同点: 都是对要执行的具体现实进行抽象,屏蔽具体实现,提供了扩展性。代码结构异同。

1.1:策略模式是通过策略上下文来区分具体执行者,而简单工厂是通过工厂方法来区分具体执行者。

demo 如下:

 public abstract class Animal
    {
        public abstract void Eat();
    }

public class Dog : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("狗吃骨头");
        }
    }

public class Cat : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("猫吃鱼");
        }
    }


public enum AnimalType
    {
        Dog,
        Cat
    }



public class AnimalFactory
    {
        public static Animal CreateInstance(AnimalType animalType)
        {
            Animal animal = null;
            switch (animalType)
            {
                case AnimalType.Dog:
                    animal = new Dog();
                    break;
                case AnimalType.Cat:
                    animal = new Cat();
                    break;
            }
            return animal;
        }
    }


    public class StrategyContext
    {
        private Animal animal;
        public StrategyContext(Animal animal)
        {
            this.animal = animal;
        }
        public void Eat()
        {
            animal.Eat();
        }
    }


调用如下


 class Program
    {
        static void Main(string[] args)
        {
 
            AnimalFactory.CreateInstance(AnimalType.Dog).Eat(); //简单工厂
            DoWork(AnimalType.Dog); //策略
            Console.ReadKey();

        }
        static void DoWork(AnimalType animalType)
        {
            StrategyContext context = null;
            switch (animalType)
            {
                case AnimalType.Dog:
                    context = new StrategyContext(new Dog());
                    break;
                case AnimalType.Cat:
                    context = new StrategyContext(new Cat());
                    break;
            }
            context.Eat();
        }
    }
View Code

 

 

 

简单工厂是通过: AnimalFactory 判断具体执行者, 策略是通过 StrategyContext 判断具体执行者,两种不管哪样写法,具体核心思想还是多态。

 

1.2: 区别

1:简单工厂是将具体操作者封装在AinmalFacotory一个CreateInstance方法里,缺点就是在添加一个类的时候,适必要修改当前方法,

违反了设计模式中OCP(Open-Close-Principle)原则。 代替方式可以通过反射,或者抽线工厂模式。工厂模式缺点写的类太多了。

2:策略模式将具体操作交给了外部执行者。 

总结:每个设计模式都有用到不同的应用场景,根据自己实际业务逻辑来区分用哪些设计模式。

 

 

posted @ 2019-12-07 15:09  低调的奢华&Code  阅读(417)  评论(0)    收藏  举报