//********************************************简单工厂模式 START**********************************************************//
//实现:根据传入的类型,生成该类型的对象
//缺点:增加新的对象类型的时候,需要修改工厂类
enum CTYPE{COREA,COREB};
class SingleCore //设计基类,可以让工厂返回该基类,然后通过该基类去指向不同的派生类
{
public:
virtual void show()=0;
};
class SingleCoreA:public SingleCore
{
public:
void show()
{
cout<<"SingleCore A"<<endl;
}
};
class SingleCoreB:public SingleCore
{
public:
void show()
{
cout<<"SingleCore B"<<endl;
}
};
//唯一的工厂,可以生产两种型号的处理器,在内部判断
class Factory
{
public:
//此处返回基类,因为该基类有可能派生出多个子类。返回基类的话,可以通过基类去获取不同类型的子类
//若返回子类的话,则被限死了
SingleCore *CreateSingleCore(enum CTYPE ctype)
{
if(ctype=="COREA")
{
return new SingleCoreA();
}
else if(ctype="COREB")
{
return new SingleCoreB();
}
else
{
return nullptr;
}
}
};
CreateSingleCore('COREA');
//********************************************简单工厂模式 END**********************************************************//
//********************************************工厂方法模式 Start*********************************************************//
//同一个大类(单核)下的多个小类(单核A,单核B) ------〉使用简单工厂模式
//实现:定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到其子类。
//缺点:增加新的对象类型的时候,需要增加工厂类
class SingleCore
{
public:
virtual void show()=0;
};
class SingleCoreA:public SingleCore
{
public:
void show()
{
cout<<"SingleCore A"<<endl;
}
};
class SingleCoteB:public SingleCore
{
public:
void show()
{
cout<<"SingleCore B"<<endl;
}
}
class Factory
{
public:
virtual SingleCore* CreateSingleCore()=0;
};
//生产A核的工厂
class FactoryA:public Factory
{
public:
SingleCoreA* CreateSingleCore()
{
return new SingleCoreA;
}
};
//生产B核的工厂
class FactoryB:public Factory
{
public:
SingleCoreB* CreateSingleCore()
{
return new SingleCoreB;
}
}
//********************************************工厂方法模式 End*********************************************************//
//*******************************************抽象工厂模式 START******************************************************//
//不同大类(单核,双核)下的多个小类(单核A,单核B)------〉使用抽象工厂模式
//单核
class SingleCore
{
public:
virtual void show()=0;
};
class SingleCoreA:public SingleCore
{
public:
void show()
{
cout<<"SingleCoreA"<<endl;
}
};
class SingleCoreB:public SingleCore
{
public:
void show()
{
cout<<"SingleCoreB"<<endl;
}
};
//多核
class MultiCore
{
public:
virtual void show()=0;
};
class MultiCoreA:public MultiCore
{
public:
void show()
{
cout<<"MultiCoreA"<<endl;
}
};
class MultiCoreB:public MultiCore
{
public:
void show()
{
cout<<"MultiCoreB"<<endl;
}
};
//工厂
class CoreFactory
{
virtual SingleCore* CreateSingleCore()=0;
virtual MultiCore* CreateMultiCore()=0;
}
//工厂A,专门用来生产A型号的处理器
class FactoryA:public CoreFactory
{
public:
SingleCore* CreateSingleCore()
{
return new SingleCoreA();
}
MultiCore* CreateMultiCore()
{
return new MultiCoreA();
}
};
//工厂B,专门用来生产B型号的处理器
class FactoryB:public CoreFactory
{
SingleCore* CreateSingleCore()
{
return new SingleCoreB();
}
MultiCore* CreateMultiCore()
{
return new MultiCoreB();
}
}
//*******************************************抽象工厂模式 END*******************************************************//