设计模式之简单工厂模式与单例模式

本文详细介绍了如何运用简单工厂模式和单例模式来创建一个具备可维护性、可扩展性和可复用性的计算器应用。通过定义抽象运算类和具体运算类,实现了基本的加法和乘法运算,并通过运算工厂类实现代理功能,确保了代码的清晰和高效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
"""
这是简单工厂模式和单例模式的一个应用场景(参考了《大话设计模式》)。

高质量程序:
简洁、可维护、可扩展、可复用。
此处使用简单工厂模式实现一个计算器,在需要修改具体运算类时只需修改相应的那个类,故具
备可维护性;当需要增加新运算方法时只需要添加新的运算类,故具备可扩展性;实现好的具体
运算类可被其他程序复用,故具备可复用性。
"""
from abc import ABCMeta, abstractmethod

#抽象运算类
class Operation(object):
    __metaclass__ = ABCMeta
    
    def __init__(self,numA=None, numB=None):
        self.numberA = numA
        self.numberB = numB
        
    @abstractmethod
    def getResult(self):
        pass
    
#具体运算类,实现具体的运算方法
class AddOperation(Operation):
    def getResult(self):
        return (self.numberA + self.numberB)
        
class MulOperation(Operation):
    def getResult(self):
        return (self.numberA * self.numberB)
        
#运算工厂类,根据输入的符号产生相应的运算类实例
#此类还使用了单例模式,因为有一个工厂就够了
class OperationFactory(object):   
    dic = {'+':AddOperation(), '*':MulOperation()} 
    _instance = None    
    
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(OperationFactory, cls).__new__(
                            cls, *args, **kwargs)
                            
        return cls._instance
     
    def CreateOperation(cls, operator):
        return cls.dic[operator]
        
#Client
if __name__ == '__main__':
    operF1 = OperationFactory()
#    下面两行代码用于检验是否实现了单例模式
#    operF2 = OperationFactory()
#    assert(id(operF1)==id(operF2))
    operator = raw_input('请输入运算符号\n')
    opr = operF1.CreateOperation(operator)
    opr.numberA = input('请输入第一个运算数\n')
    opr.numberB = input('请输入第二个运算数\n')
    result = opr.getResult()
    
    print result


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值