Python基础学习笔记——使用工厂模式、单例模式实现Computer类相关需求

此问题来自高淇老师python400集讲义课后习题

问题描述:

使用工厂模式、单例模式实现如下需求:
(1) 电脑工厂类 ComputerFactory 用于生产电脑 Computer。工厂类使用单例模式,
也就是说只能有一个工厂对象。
(2) 工厂类中可以生产各种品牌的电脑:联想、华硕、神舟
(3) 各种品牌的电脑使用继承实现:
(4) 父类是 Computer 类,定义了 calculate 方法
(5) 各品牌电脑类需要重写父类的 calculate 方法

代码:

# 测试工厂模式和单例模式的整合使用
class ComputerFactory:
    __obj = None  # 类属性
    __init_flag = True

    def create_computer(self, brand):
        if brand == "联想":
            return LENOVO()
        elif brand == "华硕":
            return ASUS()
        elif brand == "神州":
            return Hasee()
        else:
            return "未知品牌,无法创建"

    def __new__(cls, *args, **kwargs):
        if cls.__obj == None:
            cls.__obj = object.__new__(cls)
        return cls.__obj

    def __init__(self):
        if ComputerFactory.__init_flag:
            print("init ComputerFactory....")
            ComputerFactory.__init_flag = False


class Computer:
    def caculate(self):
        print("caculate:", self)
        print("该电脑可以用于计算...")


class LENOVO(Computer):
    def caculate(self):
        super().caculate()  # 通过super调用父类的方法


class ASUS(Computer):
    def caculate(self):
        super().caculate()  # 通过super调用父类的方法


class Hasee(Computer):
    def caculate(self):
        super().caculate()  # 通过super调用父类的方法


factory = ComputerFactory()
c1 = factory.create_computer("联想")
c2 = factory.create_computer("华硕")
c3 = factory.create_computer("神州")
print(c1)
print(c2)
print(c3)  # 区分三个品牌对象存储位置不同
factory2 = ComputerFactory()
factory3 = ComputerFactory()
print(factory)
print(factory2)
print(factory3)  # 测试三个电脑品牌是否用的是同一个工厂
l = LENOVO()
l.caculate()
a = ASUS()
a.caculate()
h = Hasee()
h.caculate()  # 继承父类comouter的caculate功能

程序结果:

在这里插入图片描述

程序还有需要完善的地方,欢迎小伙伴们探讨!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值