设计模式-抽象工厂

简介: 设计模式-抽象工厂
//产品系列1
class Car
{
public:
  Car(string name) : _name(name) {}
  virtual void show() = 0;
protected:
  string _name;
};
class BMW : public Car
{
public:
  BMW(string name) : Car(name) {}
  void show()
  {
    cout << "获取了一辆宝马汽车:" << _name << endl;
  }
};
class Audi : public Car
{
public:
  Audi(string name) : Car(name) {}
  void show()
  {
    cout << "获取了一辆奥迪汽车:" << _name << endl;
  }
};
//产品系列2
class Light
{
public:
  virtual void show() = 0;
};
class BMWLight : public Light 
{
public:
  void show() {
    cout << "BMW Light!" << endl;
  }
};
class AudiLight : public Light
{
public:
  void show() {
    cout << "Audi light!" << endl;
  }
};
//抽象工厂(对一组关联关系的产品簇提供产品对象的统一创建)
class AbstractFactory
{
public:
  virtual Car *createCar(string name) = 0;//工厂方法 创建汽车
  virtual Light *createCarLight() = 0;//工厂方法 创建汽车关联的产品 车灯
};
class BMWFactory : public AbstractFactory
{
public:
  Car* createCar(string name)
  {
    return new BMW(name);
  }
  Light *createCarLight()
  {
    return new BMWLight();
  }
};
class AudiFactory : public AbstractFactory
{
public:
  Car* createCar(string name)
  {
    return new Audi(name);
  }
  Light *createCarLight()
  {
    return new AudiLight();
  }
};
int main()
{
  //现在考虑产品 一类产品(有关联关系的系列产品)
  unique_ptr<AbstractFactory> bmwfty(new BMWFactory());
  unique_ptr<AbstractFactory> audifty(new AudiFactory());
  unique_ptr<Car> p1(bmwfty->createCar("X6"));
  unique_ptr<Car> p2(audifty->createCar("A8"));
  unique_ptr<Light> l1(bmwfty->createCarLight());
  unique_ptr<Light> l2(audifty->createCarLight());
  p1->show();
  p2->show();
  l1->show();
  l2->show();
  return 0;
}
相关文章
|
1月前
|
设计模式
设计模式之抽象工厂
设计模式之抽象工厂
|
3月前
|
设计模式 Java
常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)
有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法,观察者模式,策略模式)
39 2
|
6月前
|
设计模式 Java 关系型数据库
解锁设计模式的神秘面纱:编写无懈可击的代码之抽象工厂设计模式
解锁设计模式的神秘面纱:编写无懈可击的代码之抽象工厂设计模式
23 0
|
6月前
|
设计模式 架构师
设计模式之抽象工厂
设计模式之抽象工厂
|
1月前
|
设计模式 关系型数据库 数据库
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
21 1
|
3月前
|
设计模式 Java 数据库连接
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?
99 1
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
|
3月前
|
设计模式 安全 数据库
创建型设计模式-单例模式/工厂模式/抽象工厂
创建型设计模式-单例模式/工厂模式/抽象工厂
37 0
|
9月前
|
设计模式 前端开发 JavaScript
前端实现设计模式之抽象工厂
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体的类。抽象工厂模式可以帮助我们实现对象的创建与使用的解耦,同时提供了一种灵活的方式来创建不同产品族的对象。本文将介绍如何在前端中实现抽象工厂模式,并提供具体的代码示例和解读。
|
4月前
|
设计模式 SQL 数据库连接
设计模式之抽象工厂模式--创建一系列相关对象的艺术(简单工厂、工厂方法、到抽象工厂的进化过程,类图NS图)
设计模式之抽象工厂模式--创建一系列相关对象的艺术(简单工厂、工厂方法、到抽象工厂的进化过程,类图NS图)
|
7月前
|
设计模式 Go iOS开发
23种设计模式漫画版系列—抽象工厂
23种设计模式漫画版系列—抽象工厂
42 0