图形库重构:用简单工厂与工厂方法模式解决客户类使用难题
以下是使用简单工厂模式和工厂方法模式对上述系统进行重构的示例代码: ```python # 图形类的父类 class Shape: def set_color(self, color): pass def fill(self, fill_color): pass def set_size(self, size): pass def display(self): pass # 圆形类 class Circle(Shape): def __init__(self): print("创建圆形") def set_color(self, color): print(f"设置圆形边框颜色为: {color}") def fill(self, fill_color): print(f"填充圆形颜色为: {fill_color}") def set_size(self, size): print(f"设置圆形大小为: {size}") def display(self): print("显示圆形") # 三角形类 class Triangle(Shape): def __init__(self): print("创建三角形") def set_color(self, color): print(f"设置三角形边框颜色为: {color}") def fill(self, fill_color): print(f"填充三角形颜色为: {fill_color}") def set_size(self, size): print(f"设置三角形大小为: {size}") def display(self): print("显示三角形") # 简单工厂类 class ShapeFactory: def create_shape(self, shape_type): if shape_type == "circle": return Circle() elif shape_type == "triangle": return Triangle() else: raise ValueError("无效的图形类型") # 客户端类 class Client: def __init__(self, factory): self.factory = factory self.shape = None def create_shape(self, shape_type): self.shape = self.factory.create_shape(shape_type) def operate_shape(self): self.shape.set_color("red") self.shape.fill("blue") self.shape.set_size(10) self.shape.display() # 测试代码 factory = ShapeFactory() client = Client(factory) client.create_shape("circle") client.operate_shape() client.create_shape("triangle") client.operate_shape() ``` 在上述代码中: - 定义了一个抽象的`Shape`类,`Circle`和`Triangle`类继承自它。 - `ShapeFactory`类是简单工厂,根据传入的图形类型创建具体的图形对象。 - `Client`类不再直接创建图形对象,而是通过`ShapeFactory`来创建,并对图形进行操作。 这样就满足了隔离图形创建和使用的需求,并且符合开闭原则,方便更换图形或添加新图形,客户端无需修改太多代码。 ######[AI写代码神器 | 615点数解答 | 2024-10-10 16:21:39]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)348
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)317
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)562
- JSP 实现商品展示模块:分页、搜索、交互与美观界面全搞定!(字节豆包 | 19点数解答 | 2024-12-13 15:00:43)357
- 揭秘!十进制整数转其他进制用啥存储结构最合适?答案竟是它!(字节豆包 | 57点数解答 | 2024-11-13 01:21:11)254
- C++贪心算法:求解星空下可飞走萤火虫的最大数量(字节豆包 | 255点数解答 | 2025-05-24 16:49:47)220
- 蓝桥杯省赛:揭秘绳子对折 n 次剪一刀的段数规律(附 C++ 代码)(字节豆包 | 338点数解答 | 2025-08-06 16:58:53)138
- Java 实战:动物类、接口与继承实现鸟儿吃虫和飞翔功能(字节豆包 | 183点数解答 | 2024-09-19 15:53:55)307
- Java 实战:动物类、接口与继承,实现鸟儿吃虫与飞翔功能(字节豆包 | 184点数解答 | 2024-09-19 16:45:48)326
- Java 实现 BankAccount 类:账户余额管理与测试全解析(字节豆包 | 420点数解答 | 2024-10-11 08:48:21)330
- Java 编程:实现教师与学生类的创建、继承及属性操作(字节豆包 | 745点数解答 | 2024-10-16 18:40:42)417
- Java 实现 Circle 类:全面封装圆的属性与方法(字节豆包 | 256点数解答 | 2024-10-27 16:34:37)257