设计模式:工厂方法模式的实现

工厂方法来源于简单工厂模式,继承简单工厂模式的优点同时又弥补了简单工厂模式的缺点,工厂方法模式将具体产品的创建过程延迟到了抽象工厂的子类中即就是具体工厂类中,添加新的产品的时候只需要创建一个新的具体工厂类就可以完美的解决,更好的符合了开闭原则。
在这里插入图片描述

from abc import abstractmethod,ABCMeta
class AbstractProductHandler(metaclass=ABCMeta) :
    #抽象产品类
    @abstractmethod
    def doOperation(self):
        pass
class ConcrentProductHandler(AbstractProductHandler) :
    #具体产品类
    def doOperation(self):
        pass

class AbstarctFactoryHandler(metaclass=ABCMeta) :
    #抽象工厂类
    @abstractmethod
    def getProduct(self):
        pass
class ConcrentFactoryHandler(AbstarctFactoryHandler) :
    #具体工厂类
    def getProduct(self):
        return ConcrentProductHandler()


class ClientHandler :
    #客户端接口
    def runner(self):
        counter = ConcrentFactoryHandler().getProduct()
        counter.doOperation()
  • 优点
    1. 工厂方法隐藏了具体产品被实例化的具体细节,用户只关心创建产品的工厂,对外完全无需暴露创建的细节
    2. 加入新的产品的时候,无需修改抽象工厂以及抽象产品的接口, 以及其他具体工厂以及具体产品接口,只需要利用继承创建独立的具体工厂以及具体产品,极大的提高了系统的可拓展性,完美的符合了开闭原则
  • 缺点
    1. 在添加新的产品的时候,需要对应编写新的具体产品类以及对应的具体工厂类,在一定的程度上增加了系统的复杂度。同时类的数量不断增加,在编译过程中带给系统额外的开销
    2. 抽象层的引入增加了系统的抽象性以及理解难度,增加了系统实现的难度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值