工厂模式和抽象工厂概述以及二者的区别

工厂模式

什么是工厂模式

顾名思义,工厂模式就是一种生产产品的模式,我们这里的产品就是各种各样的对象

工厂模式的类图


如图所示:
1.我们有一个抽象类,工厂,两个具体实现,NYstore和Bstore,实现了抽象工厂的几个方法
2.我们有一种产品,pizza,并且对于它我们有很多实现,分为ny系和b系,不过他们都是pizza
当我们需要pizza的时候,我们只要用一个store对象的创建方法来点餐就可以了,工厂类会根据其类型的不同创建相应的pizza给我们吃。
调用代码:

抽象工厂

什么是抽象工厂

简单的说,抽象工厂就是加强的工厂模式,工厂模式只能生成一种产品,比如披萨工厂只能生成披萨,然而,我们的抽象工厂,可以生产全家桶!薯条,可乐,鸡腿,煎饼果子,这些都能生产!

抽象工厂的类图


1.如图所示,我们的thingfactory定义了几个创建方法,可以让我们生产特定的套餐,里面包含thing1,thing2,thing3,可以是啤酒,薯条,鸡腿
2.然后我们的两个具体类来实现了生产这个套餐的过程,左边的啤酒,薯条,鸡腿又分成了两派
3.我们的具体工厂是怎么生产啤酒,薯条,鸡腿呢?我们的北京商店有可能提供,北京特产咖啡味啤酒,北京特产红酒味啤酒,当然要用我们上面说的工厂方法!
怎么使用抽象工厂呢?看代码!

Factory

HKPizza

HKStore

Driver

//最外层还是跟我们的工厂方法一样

抽象工厂和工厂的同异

相同点

1.都是生产对象的方法
2.都把使用者和具体类型解绑了
3.抽象工厂生产套餐的具体元素的时候经常使用工厂方法(比如生产套餐里的可乐的时候,用了可乐工厂来根据不同地区生产不同可乐),再把他们组合起来,形成套餐

不同点

1.创建方式不同,工厂创建一个新对象使用的是继承现有工厂类然后复写工厂方法,而抽象工厂是使用了类的组合
2.针对的对象不同,工厂方法主要针对是一种产品,比如,可乐,薯条其中的一种,而抽象工厂却是针对一系列产品,比如薯条和可乐的组合套餐,也可以称之为产品族
3.1当需要新增一种产品的时候,在工厂方法中,我们只需要增加一种产品实例,并在具体工厂中加入生产这种实例的判断条件就可以了。
3.2在抽象工厂中新增一个元素(比如在现有套餐中加送一块鸡腿),我们需要改工厂接口,新增这个鸡腿的接口,并修改这个接口的实现,新增这个方法并实现,在这个实现里来创建这个赠送的鸡腿

u3coding
A software developer

3 Comments

Leave a Comment

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.