首先我们想象一个场景:身为上班族的我们午休时间到了,该去快餐店补充能量了 ,比如说顺旺基,老娘舅等连锁品牌是上班族的首选。
基于这个场景下,我们如何来运用工厂模式呢?首先我们可以想到需要两个工厂类——ShunFactory,LaoFactory,这两个工厂都继承叫HotelFactory的接口类,里面有一个CreatFood的抽象方法,上端的就不需要关注具体的实现,Lao,Shun这两个类同时继承叫Show的抽象类,这个抽象定义一个ShowFood的抽象方法。介绍到此,上代码
public interface HotelFactory { public abstract Food CreatFood(); } public class LaoFactory : HotelFactory { public virtual Food CreatFood() { return new Lao(); } } public class ShunFactory : HotelFactory { public virtual Food CreatFood() { return new Shun(); } } public abstract class Food { public abstract void ShowFood(); } public class Lao : Food { public override void ShowFood() { Console.WriteLine("这是我老娘舅的菜品:红烧鱼"); } } public class Shun : Food { public override void ShowFood() { Console.WriteLine("这是我顺旺基的菜品:霸王别鸡"); } }
我们可以看到我们在上端使用的时候只是调用了CreatFood方法,对象的创建过程我们是感知不到的,如果我们想新增一个快餐店 我们只需要新增一个自身的工厂类和展示菜品的类继承Food就行了,不需要修改其他代码,而使用简单工厂的时候这个时候就要增加case,这就不符合单一职责,加强了耦合性,而且修改了类得重新测试,你不能不确保修改了类一定不报错,这就增加了测试的成本,而我们使用工厂方法,不涉及修改其他类,这符合开闭原则,对扩展开放,对修改关闭,这样程序的稳定性就有保障,我们来总结下工厂方法的优缺点:
优点:
1: 符合开闭原则,对扩展开放,对修改关闭,程序的稳定性有保障
缺点:
1:我们创建对象的过程变得复杂了,不能直接new
原文:https://www.cnblogs.com/wshnzxj/p/13885732.html