Python使用策略模式实现绘图功能

策略模式(Strategy Pattern):允许定义一系列算法,将它们封装起来,使得它们可以互换。

实现绘制不同类型的图表(如折线图、柱状图和饼图)功能。

下面是一个示例,展示如何传入横坐标和纵坐标内容,然后绘制不同类型的图表。

python 复制代码
import matplotlib.pylab as plt
from abc import ABC, abstractmethod

class PlotStrategy(ABC):
    # 抽象类:强制子类实现此方法
    @abstractmethod
    def plot(self, x_data, y_data, desc):
        pass

class LinePlotStrategy(PlotStrategy):
    def plot(self, x_data, y_data, desc):
        print('折线图')
        plt.plot(x_data,y_data,marker=0)
        plt.title(desc[0])
        plt.xlabel(desc[1])
        plt.ylabel(desc[2])
        plt.show()

class BarPlotStrategy(PlotStrategy):
    def plot(self, x_data, y_data, desc):
        print('柱状图')
        plt.bar(x_data, y_data)
        plt.title(desc[0])
        plt.xlabel(desc[1])
        plt.ylabel(desc[2])
        plt.show()

class PiePlotStrategy(PlotStrategy):
    def plot(self, x_data, y_data, desc):
        print('饼图')
        labels = x_data
        sizes = y_data
        plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
        plt.axis('equal') # 正圆形
        plt.title(desc[0])
        plt.show()


# Context类持有PlotStrategy的引用。可以通过set_strategy方法动态地更改策略
class Context:
    def __int__(self, strategy: PlotStrategy):
        # _ 开头的变量,表示这是一个受保护的变量
        # 该变量只在类内部及其子类中使用,而不应在类外部直接访问
        self._strategy = strategy

    def set_strategy(self,strategy: PlotStrategy):
        self._strategy = strategy

    def execute_strategy(self, x_data, y_data, desc):
        self._strategy.plot(x_data, y_data, desc)


x = ['A','B','C']
y = [2,3,6]
desc = ['title','x','y']

# line = LinePlotStrategy().plot(x, y, desc)
# bar = BarPlotStrategy().plot(x,  y, desc)
# pie = PiePlotStrategy().plot(x,  y, desc)

context = Context()

context.set_strategy(LinePlotStrategy())
context.execute_strategy(x,  y, desc)

context.set_strategy(BarPlotStrategy())
context.execute_strategy(x,  y, desc)

context.set_strategy(PiePlotStrategy())
context.execute_strategy(x,  y, desc)

折线图

柱状图

饼图

相关推荐
pengyu18 分钟前
【Java设计原则与模式之系统化精讲:壹】 | 编程世界的道与术(实战指导篇)
java·后端·设计模式
小吕学编程1 小时前
策略模式实战:Spring中动态选择商品处理策略的实现
java·开发语言·设计模式
pan_junbiao2 小时前
Spring框架的设计模式
java·spring·设计模式
江梦寻3 小时前
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
开发语言·后端·python·macos·架构·策略模式
蔡蓝15 小时前
设计模式-建造者模式
服务器·设计模式·建造者模式
不伤欣20 小时前
游戏设计模式 - 子类沙箱
游戏·unity·设计模式
漫谈网络20 小时前
MVC与MVP设计模式对比详解
设计模式·mvc
蔡蓝20 小时前
设计模式-观察着模式
java·开发语言·设计模式
哆啦A梦的口袋呀1 天前
基于Python学习《Head First设计模式》第六章 命令模式
python·学习·设计模式
半路下车1 天前
【Harmony OS 5】HarmonyOS应用测试指南
设计模式·harmonyos