目录
三、计算机包括内存(RAM),CPU等硬件设备,根据图中的“产品等级结构--产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制出相应的类图。(画出模式结构图,并进行解析)
建造者模式与抽象工厂模式相似,也用来创建复杂对象。两者的区别在于,建造者模式着重一步步构造一个复杂对象(顺序),而抽象工厂模式着重于多个系列的产品对象。
一、试画出抽象工厂模式的模式结构图,并对模式进行分析
1.1 抽象工厂模式结构图:

图1 抽象工厂模式的模式结构图
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
由图1可知,抽象工厂模式包含以下4个角色:
- AbstactFactory(抽象工厂):声明一组用于创建一族产品的方法,每个方法对应一种对象;在抽象工厂中声明了多个工厂方法, 用于创建不同类型的对象,抽象工厂可以是接口,在这里是接口的形式;
- ConcreteFactory1/2(具体工厂):具体工厂实现了抽象工厂,每个工厂方法返回一个具体对象,一个具体工厂所创建的具体对象构成一个族;
- AbstactProductA/B(抽象产品):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品;
- ProductA1/A2/B1/B2(具体产品):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。
1.2 抽象工厂模式的实现(Java)
抽象工厂提供产品的生产方法。即,抽象工厂接口代码如下:
interface AbstractFactory{
public void createProductA();
public void createProductB();
}
具体工厂实现了产品的生成方法。对应具体产品类的代码如下,以具体工厂ConcreteFactory1为例:
class ConcreteFactory1 implements AbstractFactory{
public ProductA2 createProductA()
{
return new AbstractProductA2();
}
public ProductaB2 createProductB()
{
return new AbstractProductB2();
}
}
抽象产品:定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品;同样的以接口AbstractProductA为例:
interface AbstractProductA{
public void use();
}
对于实现AbstractProductA接口的ProductA1/A2类,使用该工厂进行创建。其代码如下,以ProductA1类为例子:
public class ProductA1 implements AbstractProductA{
public void use(){
//加工实现产品A
}
}
1.3 抽象工厂模式的优缺点
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。在很多软件系统中需要更换界面主题,要求界面中的按钮、文本框、背景色等一起发生改变时,可以使用抽象工厂模式进行设计。
优点:
- 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易。所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。另外,应用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模式得到了广泛的应用;
- 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。这对一些需要根据当前环境来决定其行为的软件系统来说,是一种非常实用的设计模式;
- 增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:
- 在添加新的产品对象时,难以扩展抽象工厂来生产新种类的产品,这是因为在抽象工厂角色中规定了所有可能被创建的产品集合,要支持新种类的产品就意味着要对该接口进行扩展,而这将涉及到对抽象工厂角色及其所有子类的修改,显然会带来较大的不便;
- 开闭原则的倾斜性(增加新的工厂和产品族容易,增加新的产品等级结构麻烦)。
1.4 抽象工厂模式的实现(Python)
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
# @Time :
# @Author :
# @Version:V 0.1
# @File : 抽象工厂模式.py
# @desc : 定义一个工厂类接口,让工厂子类来创建一系列相关或相互依赖的对象
from abc import ABCMeta,abstractmethod
# --------抽象产品--------
class PhoneShell(metaclass=ABCMeta):
@abstractmethod
def show_shell(self):
pass
class CPU(metaclass=ABCMeta):
@abstractmethod
def show_cpu(self):
pass
class OS(metaclass=ABCMeta):
@abstractmethod
def show_os(self):
pass
# --------抽象工厂--------
class PhoneFactory(metaclass=ABCMeta):
@abstractmethod
def make_shell(self):
pass
@abstractmethod
def make_cpu(self):
pass
@abstractmethod
def make_os(self):
pass
# --------具体产品--------
class SmallShell(PhoneShell):
def show_shell(self):
print("普通手机小手机壳")
class BigShell(PhoneShell):
def show_shell(self):
print("普通手机大手机壳")
class AppleShell(PhoneShell):
def show_shell(self):
print("苹果手机壳")

、建造者模式(Java、Python)&spm=1001.2101.3001.5002&articleId=116047376&d=1&t=3&u=f9d2a20f2bd9417aa20813833441a9e7)
3302

被折叠的 条评论
为什么被折叠?



