简单工厂模式和策略模式对比
一:相同点: 都是对要执行的具体现实进行抽象,屏蔽具体实现,提供了扩展性。代码结构异同。
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(); } }

简单工厂是通过: AnimalFactory 判断具体执行者, 策略是通过 StrategyContext 判断具体执行者,两种不管哪样写法,具体核心思想还是多态。
1.2: 区别
1:简单工厂是将具体操作者封装在AinmalFacotory一个CreateInstance方法里,缺点就是在添加一个类的时候,适必要修改当前方法,
违反了设计模式中OCP(Open-Close-Principle)原则。 代替方式可以通过反射,或者抽线工厂模式。工厂模式缺点写的类太多了。

2:策略模式将具体操作交给了外部执行者。
总结:每个设计模式都有用到不同的应用场景,根据自己实际业务逻辑来区分用哪些设计模式。

浙公网安备 33010602011771号