3:简单的工厂模型
将各种水果抽象出来一个水果类 作为父类
在工场类中 反回父类的指针
在应用层 通过父类指针去调用虚函数
应用层 直接 与工厂类交互 避免与应用层 与其他水果类之间的交互
在工场类中 反回父类的指针
在应用层 通过父类指针去调用虚函数
应用层 直接 与工厂类交互 避免与应用层 与其他水果类之间的交互
#include<iostream>
#include <string>
#include <string>
using namespace std;
//水果类
class Fruit
{
public:
virtual void showname() = 0;
};
class Apple:public Fruit
{
public:
virtual void showname()
{
cout << "apple" << endl;
}
};
class Fruit
{
public:
virtual void showname() = 0;
};
class Apple:public Fruit
{
public:
virtual void showname()
{
cout << "apple" << endl;
}
};
class Ban :public Fruit
{
public:
virtual void showname()
{
cout << "banan" << endl;
}
};
//工厂类
class Factory
{
public:
Fruit * creatFruit(string kind)
{
Fruit * f = NULL;
if (kind == "apple")
{
f = new Apple;
}
else if (kind == "ban")
{
f = new Ban;
}
{
public:
virtual void showname()
{
cout << "banan" << endl;
}
};
//工厂类
class Factory
{
public:
Fruit * creatFruit(string kind)
{
Fruit * f = NULL;
if (kind == "apple")
{
f = new Apple;
}
else if (kind == "ban")
{
f = new Ban;
}
return f;
}
};
}
};
//应用层
int main(void)
{
int main(void)
{
Factory fa;
Fruit * f = NULL;
Fruit * f = NULL;
f = fa.creatFruit("apple");
f->showname();
delete f;
f->showname();
delete f;
f = fa.creatFruit("ban");
f->showname();
delete f;
system("pause");
return 0;
}
f->showname();
delete f;
system("pause");
return 0;
}
4:抽象工厂类:
#include<iostream>
using namespace std;
// 抽象出来水果的种类
class Apple {
public:
virtual void showname() = 0;
};
class Banana {
public:
virtual void showname() = 0;
};
class Apple {
public:
virtual void showname() = 0;
};
class Banana {
public:
virtual void showname() = 0;
};
//实现不同产地的水果
class Hban :public Banana
{
public:
virtual void showname()
{
cout << "Hban" << endl;
}
};
class Hban :public Banana
{
public:
virtual void showname()
{
cout << "Hban" << endl;
}
};
class Dban :public Banana
{
public:
virtual void showname()
{
cout << "Dban" << endl;
}
};
{
public:
virtual void showname()
{
cout << "Dban" << endl;
}
};
class Happle :public Apple
{
public:
void showname()
{
cout << "hAPPLE" << endl;
}
};
class Dapple :public Apple
{
public:
void showname()
{
cout << "dAPPLE" << endl;
}
};
{
public:
void showname()
{
cout << "hAPPLE" << endl;
}
};
class Dapple :public Apple
{
public:
void showname()
{
cout << "dAPPLE" << endl;
}
};
// 抽象出工厂
class Factory {
public:
virtual Apple * create() = 0;
virtual Banana * create2() = 0;
};
//实现不同地方的工厂
class Hfactory :public Factory
{
public:
virtual Apple * create()
{
return new Happle;
}
virtual Banana * create2()
{
return new Hban;
}
};
class Dfactory :public Factory
{
public:
virtual Apple * create()
{
return new Dapple;
}
virtual Banana * create2()
{
return new Dban;
}
};
class Factory {
public:
virtual Apple * create() = 0;
virtual Banana * create2() = 0;
};
//实现不同地方的工厂
class Hfactory :public Factory
{
public:
virtual Apple * create()
{
return new Happle;
}
virtual Banana * create2()
{
return new Hban;
}
};
class Dfactory :public Factory
{
public:
virtual Apple * create()
{
return new Dapple;
}
virtual Banana * create2()
{
return new Dban;
}
};
int main(void)
{
Apple * a = NULL;
Factory * f = NULL;
Banana * b = NULL;
{
Apple * a = NULL;
Factory * f = NULL;
Banana * b = NULL;
f = new Hfactory;
a = f->create();
a->showname();
b = f->create2();
b->showname();
a = f->create();
a->showname();
b = f->create2();
b->showname();
delete f;
delete a;
delete b;
delete a;
delete b;
system("pause");
return 0;
}
return 0;
}