C#工厂模式的学习(1)简单工厂模式 http://blog.csdn.net/weixin_38661736/article/details/79049508
C#工厂模式的学习(2)工厂方法模式 http://blog.csdn.net/weixin_38661736/article/details/79050023
之前初学了工厂模式的简单工厂模式,现在我开始工厂方法模式的学习。项目包含以下类(该项目来源于http://download.csdn.net/download/coderjyf/9825340)
在上一篇介绍简单工厂模式的文章里面,有三个手机品牌,所以创建了三个类,以及将这三个类的共有方法封装在一个抽象类里面。但是如果将场景再细化一点呢?有N个手机品牌,然后这些手机品牌有着共有的方法(在这个项目里面为print),在同一个手机品牌里面,有着N个更为具体的手机产品,此时,对于手机品牌,我们可以建立一个抽象类,以此派生出更多的产品类,而对于手机品牌的工厂,我们也可以创建一个抽象的工厂类,然后派生出更多的具体的工厂类。
下面,贴上代码(以一个手机品牌为例如Iphone):
首先,创建一个MobilePhone的抽象类:
然后,创建一个具体的手机品牌类,如Iphone,继承MobilePhone,实现MobilePhone里面的抽象方法
然后,创建一个手机品牌的工厂抽象类,该类定义了一个抽象方法Create():
之后,我们可以根据这个工厂抽象类,编写属于某一个手机品牌的具体的工厂类,并实现方法Create():
那么,我们根据手机品牌这一对象,创建了描述这一对象的抽象类MobilePhone,因此我们有多少个手机品牌,就派生多少个类即可。然后一个手机品牌里面会有不同的产品,根据工厂模式,我们会创建一个工厂类来保存对这个手机品牌的产品实例。但是当我们有多个手机品牌的时候呢?此时,我们可以先定义一个工厂类的抽象类,在这里为MobilePhoneFactory类,然后根据这个类,派生出更多的手机品牌的具体的工厂类。这样的模式就是工厂方法模式。
再看下具体的调用的代码:
在这代码里面,首先用一个具体的手机品牌工厂类IphoneFactory来实例化MobilePhoneFactory抽象工厂类,然后再调用IphoneFactory里面的具体方法来实例化Mobilephone抽象类,从而调用到某一品牌的具体产品的方法。这样做,例如我们需要修改某一个品牌代码的时候,我们更改完具体的实现的代码的时候,这里引用的代码却不需要变更。因此,大大减少了维护的困难性,以及我们的工作量。
工厂模式方法,实际上还是相当于简单工厂模式,就是从单一工厂拓展为多个工厂。我认为,所有的设计模式,其实都是根据我们的需求来做的。当我们的需求扩大的时候,我们需要用其他的更适合的模式来开发。下篇将学习抽象工厂模式。