电商网站那些功能用到静态化功能,优酷网站谁做的,微信公众号 手机网站开发,传奇世界网页版平台抽象工厂模式
抽象工厂模式的概念
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向 客户端提供一个接口#xff0c;使得客户端在不必指定产品的具体类型的情况下#xff0c;能够创建多个产品 族的产品对象。
抽象工厂的角色及其职责 抽象工…抽象工厂模式
抽象工厂模式的概念
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向 客户端提供一个接口使得客户端在不必指定产品的具体类型的情况下能够创建多个产品 族的产品对象。
抽象工厂的角色及其职责 抽象工厂Creator角色 抽象工厂模式的核心包含对多个产品结构的声明任何工厂类都必须实现这个接口。具体工厂 Concrete Creator角色 具体工厂类是抽象工厂的一个实现负责实例化某个产品族中的产品对象。抽象Product角色 抽象模式所创建的所有对象的父类它负责描述所有实例所共有的公共接口。具体产品ConcreteProduct角色 抽象模式所创建的具体实例对象
产品组和产品等级结构
工厂模式要么生产香蕉要么生产苹果、要么生产西红柿但是不能同时生产一 个产品组。抽象工厂能同时生产一个产品族 而抽象工厂模式就可以生产一个产品族
产品等级结构
生产香蕉。苹果。梨子。但是每种水果都有不同的等级有的好吃有的难吃。
产品族
南方香蕉/苹果/梨子这是一个产品组 北方香蕉/苹果/梨子 这是另外一个产品族
抽象工厂模式的实现
#includeiostream
using namespace std;//抽象苹果
class AbstractApple{
public:virtual void ShowName() 0;
};//中国苹果
class ChinaApple :public AbstractApple{
public:virtual void ShowName(){cout 中国苹果 endl;}
};class USAApple :public AbstractApple{
public:virtual void ShowName(){cout 美国苹果 endl;}
};
class JapanApple :public AbstractApple{
public:virtual void ShowName(){cout 日本苹果 endl;}
};
//抽象香蕉
class AbsrtactBanana{
public:virtual void ShowName() 0;
};//中国香蕉
class ChinaBanana :public AbsrtactBanana{
public:virtual void ShowName(){cout 中国香蕉 endl;}
};
class USABanana :public AbsrtactBanana{
public:virtual void ShowName(){cout 美国香蕉 endl;}
};
class JapanBanana :public AbsrtactBanana{
public:virtual void ShowName(){cout 日本香蕉 endl;}
};//抽象的梨子
class AbsrtactPear{
public:virtual void ShowName() 0;
};//中国梨子
class ChinaPear :public AbsrtactPear{
public:virtual void ShowName(){cout 中国梨子 endl;}
};
//美国梨子
class USAPear :public AbsrtactPear{
public:virtual void ShowName(){cout 美国梨子 endl;}
};
//日本梨子
class JapanPear :public AbsrtactPear{
public:virtual void ShowName(){cout 日本梨子 endl;}
};//抽象工厂 针对产品族
class AbstractFactoty{
public:virtual AbstractApple *CreateApple() 0;virtual AbsrtactBanana *CreateBanana() 0;virtual AbsrtactPear* CreatePear() 0;
};//中国工厂
class ChinaFactory :public AbstractFactoty{
public:virtual AbstractApple *CreateApple(){return new ChinaApple;}virtual AbsrtactBanana *CreateBanana(){return new ChinaBanana;}virtual AbsrtactPear* CreatePear() {return new ChinaPear;}
};
//美国工厂
class USAFactory :public AbstractFactoty{
public:virtual AbstractApple *CreateApple(){return new USAApple;}virtual AbsrtactBanana *CreateBanana(){return new USABanana;}virtual AbsrtactPear* CreatePear() {return new USAPear;}
};
//日本工厂
class JapanFactory :public AbstractFactoty{
public:virtual AbstractApple *CreateApple(){return new JapanApple;}virtual AbsrtactBanana *CreateBanana(){return new JapanBanana;}virtual AbsrtactPear* CreatePear() {return new JapanPear;}
};void test01(){AbstractFactoty *factory NULL;AbstractApple *apple NULL;AbsrtactBanana *banana NULL;AbsrtactPear *pear NULL;//中国工厂factory new ChinaFactory; apple factory-CreateApple();banana factory-CreateBanana();pear factory-CreatePear();apple-ShowName();banana-ShowName();pear-ShowName();delete apple;delete banana;delete pear;
}int main(void){test01();system(pause);return 0;
}