Python设计模式-简单工厂

首先声明:此文档出处为以下:

版权声明:本文为CSDN博主「Burgess_zheng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Burgess_zheng/article/details/86762248

urgess_zheng/article/details/86762248

由于我是新手,为了便于自己理解面向对象,做了一些删改(主要是爱人的协助)

__author__ = "Burgess Zheng"
'''
simple Factory Method
'''
 
 
class Shape():
    a = 1#父类属性
    '''
父类;init可以没有,init用来初始化对象
比如想要个桌子,需用init来定义桌子的长度宽度高度来设置属性
创建对象的时候,需要对 对象进行初始化操作的时候,需要在类里面定义init方法
比如创建对象的时候,会传一些实参进去,这样就需要对 创建对象的类 定义init方法

比如形状就是个形状,没有附加的东西,调用的时候不会传入任何实参!所以不需要init
    '''
    def draw(self):
        raise NotImplementedError
#这个语句里面定义的什么也没做,需要继承这个类的子类重写draw方法并实现
#含有这种raise NotImplementedError语句的方法的类,就是抽象类
 
class Circle(Shape):
    '''
    Shape子类,继承并且重写draw方法
    '''
    def draw(self):
        print('draw circle')#重写父类draw方法,如果不重写就会
        #引发父类的raise notinplemetedError错误
 
class Rectangle(Shape):
    '''
    Shape的子类,继承并且重写draw方法
    '''
    def draw(self):
        print('draw Rectangle')
 
class ShapeFactory():#创建对象的接口
    '''
    工厂模式:暴露给用户去调用的,
    用户可通过该类进行选择Shape的子类进行实例化
    '''
    def create(self, shape):#这个shape是个形参,不是属性!类似函数的形参
        if shape == 'Circle':
            return Circle()#返回一个对象
        elif shape == 'Rectangle':
            return Rectangle()

        else:
            return None
 
fac = ShapeFactory() #工厂类生成的对象,就是一个具体的工厂
#比如形状就是个形状,没有附加的东西,调用的时候不会传入任何实参!所以不需要init

obj = fac.create('Circle') #用'circle'返回一个Circle()类
for i in range(10):
    a_circle = fac.create('Circle')
    a_circle.draw()#批量生产产品:Circle;只需要指导抽象类有什么方法,子类肯定有这个方法。然后去调用
    print(a_circle.a)#子类继承父类的属性并且自动继承



#然后调用circle这个子类的方法

#简单工厂方法:把生成对象的动作和对象自身属性等细节 解耦;

UML图如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值