大话设计模式:第1章 简单工厂模式

第1章:简单工厂模式

面向对象

面向对象(object oriented)三大特性:封装、继承、多态

复制 v.s. 复用,紧耦合 v.s. 松耦合

尽可能避免重复代码,将业务逻辑与界面逻辑拆分

简单工厂模式:工厂负责实例化对象的类

from abc import ABC, abstractmethod
from typing import Text

# 计算器业务逻辑
# 运算类定义为抽象类
# 加、减、乘、除运算类继承运算类

class Operation(ABC):
    """
    an abstract base class for operation
    
    args:
        number_a (float)
        number_b (float)
        
    return:
        result (float)
    """
    
    def __init__(self) -> None:
        self._number_a = 0
        self._number_b = 0
    
    @abstractmethod
    def get_result(self) -> float:
        """
        please reimplement this method
        """
        
    @property
    def number_a(self) -> float:
        return self._number_a
    @number_a.setter
    def number_a(self, number: float) -> None:
        self._number_a = number
        
    @property
    def number_b(self) -> float:
        return self._number_b
    @number_b.setter
    def number_b(self, number: float) -> None:
        self._number_b = number
        
        
class OperationAdd(Operation):
    
    def __init__(self):
        pass
    
    def get_result(self) -> float:
        return number_a + number_b
    
class OperationSub(Operation):
    
    def __init__(self):
        pass
    
    def get_result(self) -> float:
        return self._number_a - self._number_b
    
class OperationMul(Operation):
    
    def __init__(self):
        pass
        
    def get_result(self) -> float:
        return self._number_a * self._number_b
    
class OperationDiv(Operation):
    
    def __init__(self):
        pass
        
    def get_result(self) -> float:
        assert self._number_b != 0, "exception: division by zero"
        return self._number_a / self._number_b
    
# 计算器实例工厂

class OperationFactor(object):
    """
    运算类实例工厂,实例化具体运算类
    """
    switch = {
        "+": OperationAdd(),
        "-": OperationSub(),
        "*": OperationMul(),
        "/": OperationDiv(),
    }
    
    def __init__(self) -> None:
        pass
    
    def create_operator(self, operator: Text) -> Operation:
        return self.switch[operator]
        
# 计算器界面逻辑

if __name__ == "__main__":
    
    number_a = 1
    number_b = 2
    
    for operator in "+-*/":
        oper = OperationFactor().create_operator(operator)
        oper.number_a = number_a
        oper.number_b = number_b
        print(operator, ": ", oper.get_result())
+ :  3
- :  -1
* :  2
/ :  0.5

在这里插入图片描述

UML类图

在这里插入图片描述

类图(例如:动物):类(class)用矩形框表示,类图分三层,第一层是类名,如果是抽象类,则用斜体显示;第二层是类的特性,通常是字段和属性;第三层是类的操作,通常是方法或行为。前置符号:+表示public-表示private#表示protected

在这里插入图片描述

接口图(例如:飞翔):接口(interface)用矩形框表示,接口图分两层,第一层是接口名,顶端有<<interface>>;第二层是接口方法。接口还可以使用棒棒糖表示法表示。

在这里插入图片描述

继承关系:用空心三角形 + 实线表示;

在这里插入图片描述

实现接口:用空心三角形 + 虚线表示;

在这里插入图片描述

关联(association)关系:一个类“知道”另一个类(如引用另一个类对象作为成员),用实线箭头表示;

在这里插入图片描述

聚合(aggregation)关系:表示一种弱的“拥有”关系,A对象可以包含B对象,但B对象不是A对象的一部分,用空心菱形 + 实线箭头表示;

在这里插入图片描述

合成(组合,composition)关系:是一种强的“拥有”关系,体现严格的部分和整体的关系,部分和整体的生命周期相同,用实心菱形 + 实线箭头表示;合成关系连线两端的数字称为基数,表示这一端的类可以有几个实例,如果一个类可能有无数个实例,则用“n”表示。关联关系、聚合关系也可以有基数。

在这里插入图片描述

依赖(dependency)关系:用虚线箭头来表示;

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它通过一个工厂类来创建不同类型的对象,而无需暴露对象创建的逻辑给客户端。在Python中,简单工厂模式可以通过一个工厂类来创建不同的产品对象。下面是一个简单的示例: ```python class Product: def operation(self): pass class ConcreteProductA(Product): def operation(self): print("Performing operation A.") class ConcreteProductB(Product): def operation(self): print("Performing operation B.") class SimpleFactory: @staticmethod def create_product(product_type): if product_type == "A": return ConcreteProductA() elif product_type == "B": return ConcreteProductB() else: raise ValueError("Invalid product type.") # 使用简单工厂创建产品对象 factory = SimpleFactory() product_a = factory.create_product("A") product_a.operation() product_b = factory.create_product("B") product_b.operation() ``` 在上述示例中,`Product` 是一个抽象产品类,`ConcreteProductA` 和 `ConcreteProductB` 是具体产品类。`SimpleFactory` 是工厂类,通过 `create_product` 方法根据不同的产品类型创建相应的产品对象。 通过简单工厂模式,客户端无需知道具体的产品类,只需要通过工厂类来创建产品对象。这样可以降低客户端与具体产品类的耦合度,并且当需要新增产品时,只需要修改工厂类即可。 希望这个简单的示例能帮助你理解简单工厂模式在Python中的应用。如果有任何进一步的问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值