首页 > 其他分享 >创建型模式-工厂方法模式

创建型模式-工厂方法模式

时间:2023-06-28 14:26:45浏览次数:33  
标签:创建 self 模式 工厂 animal class def

# 创建型模式-工厂方法模式
# 相对于简单工厂模式,如果添加了新的动物类,对用的工厂方法需要一并修改违反了开闭原则,
# 因此工厂方法模式, 新增了抽象工厂类,将具体工厂进行隔离满足开闭原则

from abc import ABCMeta, abstractmethod


class IAnimal(metaclass=ABCMeta):

    @abstractmethod
    def say(self):
        pass


class Dog(IAnimal):

    def say(self):
        print("汪汪")


class Cat(IAnimal):

    def say(self):
        print("喵喵")


class IFactory(metaclass=ABCMeta):
    animal: IAnimal = None

    @abstractmethod
    def get_animal(self):
        pass


class DogFactory(IFactory):

    def get_animal(self):
        return Dog()


class CatFactory(IFactory):
    def get_animal(self):
        return Cat()


if __name__ == "__main__":
    cat_factory = CatFactory()
    animal = cat_factory.get_animal()
    animal.say()

  

标签:创建,self,模式,工厂,animal,class,def
From: https://www.cnblogs.com/fuchenjie/p/17511260.html

相关文章

  • 1120 1140 1160 工厂上imes
    /*车间初始化*/deletework_shopwheresitein('1120','1140','1160');insertintoimes.work_shop(site,work_shop,description)selectsite,work_center,descriptionfromwipdba.time_workcenter@jymesxwherewc_category=&#......
  • 简析电力用户预付费模式转变及前景
    罗轩志安科瑞电气股份有限公司上海嘉定201801【摘要】随着电力市场发展水平的不断提高以及电力体制改革事业的不断推进,电力企业面临的电费回收风险越来越大,管理也更加复杂。积极采用电力用户预付费模式,促进预付费系统的建设,不仅能够提升企业的电力服务水平,同时也大大降低了运营风......
  • 面试别瞎背题了!八月冲刺不要毁在传统一问一答的模式里,这份Android面试准备计划助你事
    背景这阵子,各大网络社交平台,刷到最多的就是面试求职相关的信息。这位网友在脉脉职言求助。本科毕业三年了,一直做安卓开发,请问跳槽找工作要怎么准备呢?写代码三年月薪不到一万是不是很失败?近日,还有程序员就因为这个问题在某职场社交软件上,被认证了的百度京东员工一顿嘲讽。找工作不可......
  • 创建Avalonia 模板项目-基础
    创建Avalonia模板项目-基础Avalonia是一个跨平台的.NET框架,用于构建漂亮、现代的图形用户界面(GUI)。使用Avalonia,您可以从单个代码库创建适用于Windows、macOS、Linux、iOS、Android和WebAssembly的原生应用程序。本文部分内容来自官方文档地址:官方文档1.环境配置要求......
  • 精选Android中高级面试题:性能优化,JNI,设计模式
    性能优化1、图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?参考回答:首先我们要清楚图片的三级缓存是如何的:如果内存足够时不回收。内存不够时就回收软引用对象2、内存中如果加载一张500*500的png高清图片。应该是占用多少的内存?不考虑屏幕比的话:占用内存......
  • 创建模式-简单工厂模式
    fromabcimportABCMeta,abstractmethodclassAnimal(metaclass=ABCMeta):@abstractmethoddefsay(self):passclassDog(Animal):defsay(self):print("汪汪")classCat(Animal):defsay(self):print(&......
  • 光盘刻录两种模式
     具体方法如下:一、把一张空白光盘放入刻录机(光盘驱动器);1、打开“计算机”窗口,双击光盘驱动器的图标,弹出“刻录光盘”对话框,选择刻录类型;2、这里有两个选项:一个是“类似于USB闪存驱动器”;另一个是“带有CD/DVD播放器”;、选择“类似于USB闪存驱动器”,将刻录一张可以随时保......
  • 说说设计模式~责任链模式
    回到目录责任链模式它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择!下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链......
  • 你用过哪些设计模式(一)?
    什么是设计模式?一些经验总结的最佳实践!是不是必须要用?并不是,但是既然已经说是最佳实践了,该用的地方,你不用,就有些违背常理了。一、单例这个或许是最最最常见,也是最最最常用的了。为什么要用单例模式?因为只需要一个对象就够了(有时候只能有一个,有时候是不需要有多个)。对象的......
  • 主窗口 模式打开窗口 UI刷新的测试
    窗体1定时器,标签,按钮。窗体1打开后,定时器自动运行,定时器每秒时间到,使得标签数值加1,点击按钮会打开窗体2。窗体2以模式方式打开,点击按钮会启动一次通讯请求。1-窗体1定时器,窗体2按钮触发同步通讯,窗体1的标签数值卡住不更新2-窗体1定时器,窗体2按钮触发异步通讯,窗体1的标签......