昨天公司有同事分享了设计模式的一些内容,主要讲了简单工厂,抽象工厂,工厂方法的东西,讲的时候听得不是很明白,就像自己上网调查,并且写一篇博客加深自己的印象
抽象工厂:
抽象工厂是对应类这个概念的,也就是说一个类就是一个工厂。一个类里边可以有很多方法,这个是毋庸置疑的,而方法最多只能有一个返回值,假如这个类里边有三个方法,每个方法都一个返回值的话,那么对应抽象工厂来讲就是一个工厂里边有好多的产品线,每个产品线都可以生产一个产品,那么一个工厂就可以生产好多产品。
刚才讲的好像跟<抽象>没什么关系,那抽象是怎么体现出来的呢,类是怎么抽象的?提取一些事物的共同特征称其为抽象,像C#里边的接口,抽象类,都是抽象的概念,其实类也是一种抽象,对象才是真真正正具体的东西,就像我们讲<工厂> 他就是一个抽象概念,比如说小明家旁边有两家工厂,一个水泥厂,一个水果糖厂(这两个好像挨着不太好)
你可以说小明家旁边的<水泥厂>是<工厂>,但是你不能说<工厂>是小明家旁边的<水泥厂>,概念颠倒了,小明家旁边的的水果糖厂也是工厂啊。好还是用刚才的例子来举例,用这两种东西来举例有点难,但是咱们就硬着头皮上吧。比如说水泥厂要生产水泥有三种选择,A,B,C型水泥,对应不同的档次,同时呢水果糖厂也有三种选择,A,B,C型水果糖,对应不同的档次,现在我们要生产产品,但是这个水泥和水果糖找共同特征有点难,但是也有共同特征,一个当老板的开工厂是为了什么呢,不用想也知道啊,挣钱呗。所以这两者的共同特征是什么还钱。我没有UML图,我就直接描述了,现在定义一个抽象的的类,就是产品,这个抽象类有一个方法叫还钱,定义一个抽象类(工厂抽象出来),就是抽象工厂,这个抽象工厂有三个方法,分别是生产A型产品,B型产品,C型产品。水泥厂和水果糖厂都继承了这个抽象工厂,这两个工厂呢有一个老板,就是小明,小明由于资金不足,只能同时让一家工厂开工,但是呢他又不想自己决定由那个工厂开工赚钱,又不想自己去执行生产,他只管能拿到产品去还钱就行了,怎么办呢,小明冥思苦想啊,有一天他终于想出了一个办法,我自己不能决定,我让我老爸给我抽签决定(配置文件),我只要把老爸抽签结果拿到,决定了让哪个工厂生产能换钱的产品就行了,我管他是水泥还是水果糖呢。
工厂方法:
工厂方法呢,对应于类成员的概念,一个成员或者一个方法只能有一个返回值,这就决定了工厂方法只能生产一种产品,也就是说我现在工厂就有一条生产线投入生产并且能够换钱。
咱们还用刚才的例子来说明工厂方法,小明现在资金短缺,把水泥厂卖了,A,B生产线也卖了.现在水果糖厂的C产品需要一种包装纸,于是小明买了一个包装纸厂,这个工厂是水果糖厂的子工厂,水果糖厂只知道自己需要包装纸来生产包装纸包装自己糖好卖个好价钱,但是自己又没有生产线,怎么办呢,让子工厂生产啊,子工厂有包装纸生产线啊,那么这个问题就解决了,那我想换一种包装纸呢,我换一家子工厂的生产线生产不就行了。不同的子工厂生产的包装纸不一样,包装出来的东西看起来不一样,其实他还是同一种产品。
这就是我对抽象工厂和工厂方法的理解,有什么不对的地方还请大家指教
来源:https://www.cnblogs.com/DDJY/p/4414519.html