首页 > 编程语言 >Python实现软件设计模式1:简单工厂/静态工厂模式

Python实现软件设计模式1:简单工厂/静态工厂模式

时间:2023-12-14 10:34:59浏览次数:27  
标签:__ Python self 模式 工厂 TV brand def

包含的角色

  • 工厂角色 Factory 静态方法
  • 抽象产品角色 Product 声明公用的抽象方法和属性
  • 具体产品角色 ConcreteProduct 覆盖抽象产品中声明的方法,多种产品多种覆盖

模式特点

  • 可以降低系统耦合度,使用工厂方法时无需知道对象创建细节,传入工厂类的参数可以是字符串、也可以是提前规定好的整型参数
  • 但是所有产品都由一个工厂来生产,工厂类的职责相对较重,添加新产品需要修改工厂类的判断逻辑,违背开闭原则
  • 适合生产较少产品类型的场景,这样工厂类中的控制逻辑比较简单

代码

from abc import ABC,abstractmethod

class TV(ABC):      # 抽象产品类
    @abstractmethod
    def play(self):
        pass

class HaierTV(TV):  # 具体产品1 继承抽象类
    def play(self):
        print(f"海尔电视播放中...")

class HuaweiTV(TV): # 具体产品2
    def play(self):
        print(f"华为电视播放中...")

class TVFactory:
    @staticmethod
    def productTV(brand):        # 可以设置为静态方法
        if brand == 'Haier':
            print("TV工厂生产海尔电视机!")
            return HaierTV()
        elif brand == 'Huawei':
            print("TV工厂生产华为电视机!")
            return HuaweiTV()
        else:
            raise TypeError("There aren't this brand product.")
    
class Client:
    def __init__(self, brandName):
        self.brand = brandName

    def run(self):  
        # tv = TV()   # tv产品  定义为  抽象TV类
        # tf = TVFactory()  # 如果productTV不是静态方法则使用本条注释
        tv = TVFactory.productTV(self.brand)    # tf.productTV(self.brand)
        tv.play()

if __name__=='__main__':
    t1 = Client('Haier')
    t1.run() 

    t2 = Client('Huawei')
    t2.run() 

解释

Client类是客户端,传入一个参数,可以是字符串类型也可以是自定义的任意类型参数,针对性的生产不同的具体TV产品。python是动态语言,不需要像C++\Java一样声明变量的类型;因此在Java或C++形式的Client类的run方法中,tv需要预先声明为TV()类型的对象,后面被TVFactory()返回的具体类型所覆盖。

标签:__,Python,self,模式,工厂,TV,brand,def
From: https://www.cnblogs.com/Higgerw/p/17900607.html

相关文章

  • 利用CRM优化LTC流程——企业客户管理的新模式探讨
     在现代商业环境下,将潜在客户转化成实际销售是公司成功的基石之一。而CRM管理系统是完成LTC的有效工具。本文将向您介绍LTC是什么?公司怎样企业如何通过CRM实现这一流程的?LTC(从线索到现金)是企业运营管理中的一个重要概念,包括从获取销售线索到提供解决方案、签署商业合同、进行......
  • 【Python爬虫】Scrapy框架处理分页爬取+cookie登录_17k小说网
    简介本文主要讲常规分页爬取与利用Scrapy框架怎么快捷的爬取分页的数据以及cookie登录,案例网站时17k小说网,url是https://www.17k.com/常规分页爬取Scrapy框架分页爬取cookie登录分页常规分页爬取常规分页爬取,直接观察页面数据,一共有多少页数据,就for循环多少次classXiao......
  • 12.14——python类
    classEmployee:  up=0.1    def__init__(self,name,salary):    #构造器__init__    self.username=name#实例变量    self.salary=salary1          defup_salary(self):#self表示......
  • 使用Python和Qt6(PySide6)创建GUI应用1简介
    1简介在本书从GUI开发的基本原理逐步过渡到使用PySide6创建您自己的、功能齐全的桌面应用程序。1.1GUI简史图形用户界面(GUIGraphicalUserInterface)历史悠久,可追溯到20世纪60年代。斯坦福大学的NLS(ON-Line系统引入了鼠标和窗口概念,并于1968年首次公开展示。随后,施乐公司......
  • 设计模式:简单工厂模式
    简单工厂模式不直接向客户端暴露对象创建的实现细节,而通过一个工厂类来负责创建产品类的实例。简单工厂模式的组成:抽象产品(AbstractProduct):定义产品的接口,在这个例子中是Payment类。具体产品(ConcreteProduct):实现抽象产品接口的类,在这个例子中是Alipay和Wechat......
  • python 将 .pdf 文件转为 .md
    方法一:工具网站https://pdf2md.morethan.io/方法二:代码手动转换pipinstallaspose-wordsdoc=aw.Document(r"pdf文件路径\xxx.pdf")doc.save("Output.md")来源:https://products.aspose.com/words/zh/python-net/conversion/—————————————......
  • python之tkinter的grid布局
    grid将界面划分为二维网格,由行和列分割,从上到下,左到右编号,最左上角是(0,0),依次类推。也可结合frame使用,形成更加复杂的界面。语法:grid(argus……)参数:参数属性举例或备注                             row定位组件在第几行 column定位组件在第几列......
  • 使用java调用Python脚本
    通过使用java中的ProcessBuilder类,可以实现在java代码中调用外部的python代码的功能,以下为具体代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassJavaCallPython{publicstaticvoidmain(String[]args)......
  • 简单写一下设计模式7原则
    开闭原则:只许增加,不许修改;使用抽象进行构建,使用实现拓展细节;面向抽象编程;提高可复用性和可维护性依赖倒转原则:依赖抽象,而不是依赖具体的实现,可以减少耦合性,提高系统稳定性,降低修改程序的风险单一职责原则:一个类,接口,方法只负责一个职责;降低复杂度,提高可维护性接口隔离原则:使用多......
  • Python Numpy 数据可视化
    ​ 1、安装MatplotlibMatplotlib是一个功能强大且受欢迎的Python库,用于生成2D图表和图形。它因其灵活性、广泛的功能和用户友好的界面而广泛用于各种科学、工程和数据分析应用。可以通过pip安装,命令如下,pipinstallmatplotlib或python3-mpipinstallmatplotl......