首页 > 解决方案 > 在 c 中实现一个基本的策略模式

问题描述

我正在尝试实施一个基本的战略模式来理解。我是编程新手。我在下面的代码中做错了什么。

有人可以给出策略模式的基本c实现吗?提前谢谢


#include <stdio.h>
#include <stdlib.h>

typedef int (*CustomerPriceStrategy)(int);
int bronzePriceStrategy(int);
int silverPriceStrategy(int);
int goldPriceStrategy(int);


struct Customer
{
 const char* name;
 CustomerPriceStrategy priceStrategy;

};
void placeOrder(struct Customer* customer)
{
    int a;
a=customer->priceStrategy(3);
printf("%d",a);

}

int main(void) {
    struct Customer *customer;
    customer->name="bronze";
    customer->priceStrategy=&bronzePriceStrategy;
    placeOrder(customer);
    return EXIT_SUCCESS;
}
int bronzePriceStrategy(int a)
{
 printf(" 40+ shipping");
 return (a+40);
}
int silverPriceStrategy(int a)
{
 printf(" 25+ shipping");
 return (a+25);
}
int goldPriceStrategy(int a)
{
 /* Free shipping for gold customers. */
 printf(" no shipping fee");
 return a;
}



标签: cdesign-patternsprocedural-programming

解决方案


struct Customer *customer;

是一个未初始化的指针,所以:

customer->name="bronze";
customer->priceStrategy=&bronzePriceStrategy;

将调用未定义的行为。

您可以通过以下方式替换它:

struct Customer customer;
customer.name="bronze";
customer.priceStrategy=&bronzePriceStrategy;
placeOrder(&customer);

推荐阅读