抽象工厂模式

    xiaoxiao2025-04-03  12

    #include <cstdio> #include <stack> #include <set> #include <iostream> #include <string> #include <vector> #include <queue> #include <list> #include <functional> #include <cstring> #include <algorithm> #include <cctype> #include <string> #include <map> #include <iomanip> #include <cmath> #include <time.h> #define LL long long using namespace std; /* 抽象工厂模式和工厂方法模式: 1. 都有一个抽象的工厂基类,但前者的子类生产的是一个产品族,而后者的子类生产的是一个单一的产品。 2.前者有多个产品的抽象基类,而后者只有一个。 用处:当想提供一个产品库时,只想对外显示接口而不是实现细节。 关键代码:工厂抽象基类中定义创建不同类型产品的接口,子类实现接口,使每个具体产品类型对应一个接口;有多个抽象产品基类 缺点:新增产品族时很麻烦,需要修改工厂抽象基类, */ // 产品 class Mobile { public: virtual void show()=0; }; class LinuxMobile:public Mobile { public: void show() { puts("------------this is a LinuxMoblie------------"); } }; class WindowMobile:public Mobile { public: void show() { puts("------------this is a WindowMoblie------------"); } }; class PC { public: virtual void show()=0; }; class LinuxPC:public PC { public: void show() { puts("**********It is a LinuxPC**********"); } }; class WindowPC:public PC { public: void show() { puts("**********It is a WindowPC**********"); } }; // 工厂 class absFactory { public: virtual PC* createPC()=0; virtual Mobile* createMobile()=0; }; class LinuxFactory:public absFactory { public: LinuxFactory() { puts("create a Linux factory"); } Mobile* createMobile() { puts("product a mobile of linux"); return new LinuxMobile; } PC* createPC() { puts("product a mobile of window"); return new LinuxPC; } }; class WindowFactory:public absFactory { public: WindowFactory() { puts("create a Window factory"); } Mobile* createMobile() { puts("product a mobile of Window"); return new WindowMobile; } PC* createPC() { puts("product a PC of window"); return new WindowPC; } }; int main() { absFactory *factory; factory = new LinuxFactory; Mobile *ml = factory->createMobile(); ml->show(); delete ml; PC *pc = factory->createPC(); pc->show(); delete pc; delete factory; puts("+++++++++++++++++++++++++++++++++++++++"); factory = new WindowFactory(); ml = factory->createMobile(); ml->show(); delete ml; pc = factory->createPC(); pc->show(); delete pc; delete factory; }
    转载请注明原文地址: https://ju.6miu.com/read-1297684.html
    最新回复(0)