网站设计三原则,wordpress固定链接后500错误,网站安全建设,建筑行业网站模板1. 意图 提供一个创建一系列相关或相互依赖对象的接口#xff0c;而无需指定它们具体的类。
2. 四种角色 抽象产品(Product)、具体产品(Concrete Product)、抽象工厂(Abstract Factory)、具体工厂(Concrete Factory)。
3. 优点 3.1 分离了具体的类。Client只需使用抽象工厂类…1. 意图 提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。
2. 四种角色 抽象产品(Product)、具体产品(Concrete Product)、抽象工厂(Abstract Factory)、具体工厂(Concrete Factory)。
3. 优点 3.1 分离了具体的类。Client只需使用抽象工厂类和抽象产品类的接口。 3.2 易于交换产品系列。改变具体工厂很容易。 3.3 有利于产品的一致性。一次只能使用同已个系列中的对象。
4. 缺点 4.1 难以支持新种类的产品。 支持新产品需要修改抽象工厂类及其所有子类工厂。 一个更灵活但不太安全的方法是给创建对象的操作增加一个参数该参数指定对象的种类。
5. 相关模式 5.1 抽象工厂类通常用工厂方法(Factory Method)实现也可用原型(Prototype)实现。 5.2 一个具体的工厂通常是一个单件(Singleton) 。
6. 代码示意(C)
#pragma once
#include iostreamusing namespace std;class AbstractProductA
{
public:virtual void Show() 0;
};
class ProductA1 : public AbstractProductA
{
public:virtual void Show() {cout 系列1ProductA endl;}
};
class ProductA2 : public AbstractProductA
{
public:virtual void Show() {cout 系列2ProductA endl;}
};class AbstractProductB
{
public:virtual void Show() 0;
};
class ProductB1 : public AbstractProductB
{
public:virtual void Show() {cout 系列1ProductB endl;}
};
class ProductB2 : public AbstractProductB
{
public:virtual void Show() {cout 系列2ProductB endl;}
};class AbstractFactory
{
public:virtual AbstractProductA* CreateProductA() 0;virtual AbstractProductB* CreateProductB() 0;
};class ConcreteFactory1 :public AbstractFactory
{
public:AbstractProductA* CreateProductA() {return new ProductA1;}AbstractProductB* CreateProductB() {return new ProductB1;}
};class ConcreteFactory2 :public AbstractFactory
{
public:AbstractProductA* CreateProductA() {return new ProductA2;}AbstractProductB* CreateProductB() {return new ProductB2;}
};
#include AbstractFactory.h
int main() {AbstractFactory* pFactory new ConcreteFactory1;AbstractProductA* pProductA pFactory-CreateProductA();AbstractProductB* pProductB pFactory-CreateProductB();pProductA-Show();pProductB-Show();delete pProductA;delete pProductB;delete pFactory;return 0;
}
运行结果 6.1 要更换产品系列只需在main函数里用ConcreteFactory2来替换ConcreteFactory1即可(3.2)。
6.2 但如果要增加新产品ProductC则AbstractFactory需增加新接口ConcreteFactory1和 ConcreteFactory2也要做相应的修改(4.1)。