#include<iostream> using namespace std; //抽象层,可以声明很多大的抽象类 //这些功能接口是通用的 class Cpu { public: virtual void compute() = 0; }; class Disk { public: virtual void store() = 0; }; class Gpu { public: virtual void display() = 0; }; class Computer { public: Computer(Cpu *cpu,Gpu *gpu,Disk *disk) { cout<<"Computer(Cpu *cpu,Gpu *gpu,Disk *disk)"<<endl; this->cpu = cpu; this->gpu = gpu; this->disk = disk; } ~Computer() { cout<<"~Computer"<<endl; } void work() { this->cpu->compute(); this->gpu->display(); this->disk->store(); } private: Cpu *cpu; Gpu *gpu; Disk *disk; }; //实现层 //可以理解为某些厂商具体了上面的那些通用接口 //比如生产GPU的有英伟达、高通,不管他们内部是怎么做的,只需要满足接口标准 class Nvidia:public Gpu { public: virtual void display() { cout<<"NVIDIA dispaly"<<endl; } }; class Kingston:public Disk { public: virtual void store() { cout<<"KINGSTON store"<<endl; } }; //Cpu的一种实现 class Intel:public Cpu { public: virtual void compute() { cout<<"Intel i7 compute"<<endl; } }; //Cpu的另一种实现 class AMD:public Cpu { public: virtual void compute() { cout<<"AMD Ryzen 7 compute"<<endl; } }; //业务层,可以理解为组装电脑 //或者让电脑去做某些事情 void computer_work(Computer &computer) { computer.work(); } int main(void) { //定义了一个因特尔的cpu Cpu *c1 = new Intel; //定义了另一块cpu为AMD的 Cpu *c2 = new AMD; //显卡 Gpu *g = new Nvidia; //硬盘 Disk *d = new Kingston; //只要定义好了通用的硬件标准 //各个厂商按需要去实现 //随便传入任何不同厂商的硬件组合都能产生新的电脑 Computer computer1(c1,g,d); Computer computer2(c2,g,d); //而且符合通用接口标准的电脑也能随时就运行 //而无需管你具体用了哪些硬件 computer_work(computer1); computer_work(computer2); return 0; }
这种定义抽象类,然后不管具体实现,能降低编程的耦合度,有利于程序拓展。