当前位置:文档之家› 抽象工厂设计模式的实验报告

抽象工厂设计模式的实验报告

}; // 具体产品 Text1 class Text1 : public DrawText {
public: Text1() {
std::cout<<"Text1\n"; }; };
// 具体产品 Rectangle1 class Rectangle1: public DrawRectangle {
Dot2() {
std::cout<<"Dot2\n"; }
};
// 具体产品 Text2 class Text2 : public DrawText {
public: Text2() {
std::cout<<"Text2\n"; }; }; // 具体产品 Rectangle2 class Rectangle2 : public DrawRectangle { public: Rectangle2() {
} DrawText* CreateText() {
return new Text2(); } DrawRectangle* CreateRectangle() {
return new Rectangle2(); } }; // class Drawing { public: DrawLine* drawline; DrawDot* drawdot; DrawText* drawtext; DrawRectangle* drawRectangle; public: Drawing(AbstractFactory* factory); };
std::cout<<"Rectangle2\n";
} };
class AbstractFactory {
public: virtual DrawLine* CreateLine()=0; virtual DrawDot* CreateDot()=0; virtual DrawText* CreateText()=0; virtual DrawRectangle* CreateRectangle()=0;
一、实验目的 使用抽象工厂模式实现一个图形界面,其中的图形包括:文本(Text),矩形(Rectangle),
点(Dot),线(Line)。 二、实现方法 1 采用 VC++环境 2 采用工厂的设计模式 三、模式的思想 提供一个创建一系列相关或相互依赖对象的接口,而不需指定他们具体的类 四、模式设计的 UML 类图的绘制
Drawing::Drawing(AbstractFactory* factory) {
drawdot = factory->CreateDot(); drawline = factory->CreateLine(); drawtext = factory->CreateText(); drawRectangle = factory->CreateRectangle(); }
};
// 抽象产品 DrawRectangle class DrawRectangle {
}; // 具体产品 Line1 class Line1 : public DrawLine {
public: Line1() {
std::cout<<"Line1\n"; } }; // 具体产品 DБайду номын сангаасt1 class Dot1 : public DrawDot { public: Dot1() { std::cout<<"Dot1\n"; }
五、程序源代码 #include<stdio.h> #include<iostream> // 抽象产品 DrawLine class DrawLine { }; // 抽象产品 DrawDot class DrawDot { };
// 抽象产品 DrawText class DrawText {
}; // ConcreteFactory1 class ConcreteFactory1 : public AbstractFactory {
public: DrawLine* CreateLine() { return new Line1(); } DrawDot* CreateDot() { return new Dot1(); } DrawText* CreateText() { return new Text1(); } DrawRectangle* CreateRectangle() { return new Rectangle1(); }
}; // ConcreteFactory2
class ConcreteFactory2 : public AbstractFactory {
public: DrawLine* CreateLine() { return new Line2(); } DrawDot* CreateDot() { return new Dot2();
public: Rectangle1() {
std::cout<<"Rectangle1\n"; } };
// 具体产品 Line2 class Line2 : public DrawLine { public:
Line2() { std::cout<<"Line2\n"; } };
// 具体产品 Dot2 class Dot2 : public DrawDot { public:
void main() {
AbstractFactory* factory= new ConcreteFactory1(); Drawing* drawing= new Drawing(factory) ;
}
六、运行结果
七、实验总结 1、 通过本次实验,加深了对抽象工厂模式的理解。抽象工厂提供一个创建一系列相关 或相互依赖对象的接口,而不需指定他们具体的类。抽象工厂同样是存在缺点的, 难以支持新种类的产品。 2、 由于以前对 C++不太了解,本次实验加深了对 C++的了解,强化了编程能力。理解 解了构造函数,虚函数,纯虚函数,成员函数实现,类之间的继承等含义。 3、 但对于函数的调用问题常常出错,这在以后的学习中应多加注意和练习。
相关主题