抽象工厂模式(Java、Python)、建造者模式(Java、Python)

 

目录

一、试画出抽象工厂模式的模式结构图,并对模式进行分析

1.1 抽象工厂模式结构图:

1.2 抽象工厂模式的实现(Java)

1.3 抽象工厂模式的优缺点

1.4 抽象工厂模式的实现(Python)

二、试画出建造者模式的模式结构图,并对模式进行分析。

2.1建造者模式结构图

2.2 建造者模式的实现(Java)

2.3 建造者模式的优缺点

2.4 建造者模式的实现(Python)

三、计算机包括内存(RAM),CPU等硬件设备,根据图中的“产品等级结构--产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制出相应的类图。(画出模式结构图,并进行解析)

3.1计算机设备创建程序模式结构图

3.2计算机设备创建程序实现


建造者模式与抽象工厂模式相似,也用来创建复杂对象。两者的区别在于,建造者模式着重一步步构造一个复杂对象(顺序),而抽象工厂模式着重于多个系列的产品对象。 

一、试画出抽象工厂模式的模式结构图,并对模式进行分析

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("苹果手机壳")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

璩明哲

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值