目录
策略模式和简单工厂模式的区别
策略模式和简单工厂模式是两种不同的设计模式,它们在用途和实现上有所不同。
- 简单工厂模式是一种创建型模式,用于创建特定类型的对象。它通过一个工厂类来创建对象,根据不同的条件返回不同的对象实例。简单工厂模式关注的是对象的创建。
- 策略模式是一种行为型模式,允许类在运行时切换或运行不同的算法。策略模式允许类以不同的方式执行特定任务,而不需要了解具体的算法实现细节。策略模式关注的是在运行时选择不同的算法。
下面是一个关于这两种模式的示例代码:
// 策略模式示例
#include <iostream>
using namespace std;
class SortAlgorithm {
public:
virtual void sort(int arr[], int size) = 0;
};
class QuickSort : public SortAlgorithm {
public:
void sort(int arr[], int size) override {
// 实现快速排序算法
}
};
class MergeSort : public SortAlgorithm {
public:
void sort(int arr[], int size) override {
// 实现归并排序算法
}
};
class SortContext {
private:
SortAlgorithm* strategy;
public:
void setStrategy(SortAlgorithm* sortAlgorithm) {
strategy = sortAlgorithm;
}
void performSort(int arr[], int size) {
strategy->sort(arr, size);
}
};
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
int size = sizeof(arr) / sizeof(arr[0]);
SortContext context;
context.setStrategy(new QuickSort());
context.performSort(arr, size);
return 0;
}
// 简单工厂模式示例
#include <iostream>
using namespace std;
class Product {
public:
virtual void operation() = 0;
};
class ConcreteProductA : public Product {
public:
void operation() override {
cout << "Operation A" << endl;
}
};
class ConcreteProductB : public Product {
public:
void operation() override {
cout << "Operation B" << endl;
}
};
class SimpleFactory {
public:
Product* createProduct(int type) {
if (type == 1) {
return new ConcreteProductA();
} else if (type == 2) {
return new ConcreteProductB();
} else {
return nullptr;
}
}
};
int main() {
SimpleFactory factory;
Product* productA = factory.createProduct(1);
Product* productB = factory.createProduct(2);
productA->operation();
productB->operation();
return 0;
}
在上面的示例中,策略模式允许在运行时切换排序算法,而简单工厂模式用于创建不同的产品实例。
策略模式的类图为什么采用聚合
策略模式的类图采用聚合是为了表示Context类与Strategy类之间的关系。在策略模式中,Context类需要持有一个Strategy类的引用,以便在运行时能够动态地切换不同的策略。这种关系可以用聚合来表示,聚合表示一种弱拥有关系,即Context类拥有Strategy类的引用,但并不拥有Strategy类的生命周期。这种设计使得Context类能够与不同的策略进行交互,同时保持了灵活性和可维护性。
简单工厂模式的类图为什么采用关联表示
简单工厂模式的类图采用关联表示是因为简单工厂模式中的工厂类和产品类之间存在一种关联关系。工厂类通过关联关系来创建产品类的实例,从而实现了对象的创建和解耦。在类图中使用关联表示这种关系,能够清晰地展现出工厂类和产品类之间的依赖关系,有助于理解和设计该模式的结构。
以下是一个简单工厂模式的类图示例,其中使用关联表示工厂类和产品类之间的关系:
+-----------------+ +-----------------+
| SimpleFactory |------>| Product |
+-----------------+ +-----------------+
在上面的示例中,SimpleFactory
工厂类与 Product
产品类之间通过关联表示了它们之间的关系。这种关联关系是简单工厂模式中非常重要的一部分,因为工厂类通过关联关系来创建产品类的实例,实现了对象的创建和解耦。
因此,简单工厂模式的类图采用关联表示是为了清晰地展现工厂类和产品类之间的依赖关系,有助于理解和设计该模式的结构。
标签:arr,int,类图,模式,工厂,问题,经典,设计模式,public From: https://www.cnblogs.com/yubo-guan/p/17971206