数据库与工厂模式的思考
来源:互联网 发布:手机淘宝怎么关注降价 编辑:程序博客网 时间:2024/06/06 07:43
最近一直忙着硬件调试,闲来看看数据库和JDBC的诸多知识,不禁大有所得,昨日偶得工厂模式,即详考之。
一、引言
首先需要明确为什么建立多态机制?多态机制是为了使得大部分代码尽可能少的了解对象的具体类型,而是只与对象家族中的一个通用表示打交道。这样就使得代码更容易读写和维护,所以“多态”是面向对象编程的基本目标。
二、抽象工厂
2.1 什么是抽象工厂?
当我们需要建造栋大楼时,常常是需要遵循图纸工作的。在抽象工厂中我们就将图纸作为一个类族独立出来,构成一组具有相互继承关系的工厂。其中,基类工厂定义了构造的“大楼”的基本框架,子类工厂定义了框架的具体实现。在构建大楼时,通过“多态”技术,调用子类工厂的相关方法,就可以实现同一样式族中各个部件。
2.2 抽象工厂实现
本实现想要构建一组生成统一样式窗体的抽象工厂。窗体中有两个组件:Window和ScrollBar。每种组件有两种样式:Motif和PM。
1、传统的方法
我们可能容易想到的通过函数参数来确定样式。
class Factory
{
public:
MotifWindow createMotifWindow();
}
这样做有一个坏处,使得用户代码可以访问到图纸的具体实现,增加了代码的耦合性,没有一组通用的接口。
2、抽象工厂的方法
//抽象工厂接口,定义通用性
class WidgetFactory
{
public:
virtual Window *CreateWindow() //多态方法
{
return new Window();
}
virtual ScrollBar *CreateScrollBar()
{
return new ScrollBar();
}
};
//工厂实现No.1
class MotifWidgetFactory : public WidgetFactory
{
public:
virtual Window *CreateWindow()
{
return new MotifWindow();
}
virtual ScrollBar *CreateScrollBar()
{
return new MotifScrollBar();
}
};
//工厂实现No.2
class PMWidgetFactory : public WidgetFactory
{
public:
virtual Window *CreateWindow()
{
return new PMWindow();
}
virtual ScrollBar *CreateScrollBar()
{
return new PMScrollBar();
}
};
//窗口组件
class Window
{
public:
Window()
{
// cout << "Constructing a window" << endl;
}
};
class MotifWindow : public Window
{
public:
MotifWindow()
{
cout << "Constructing a motifwindow" << endl;
}
};
class PMWindow : public Window
{
public:
PMWindow()
{
cout << "Constructing a pmwindow" << endl;
}
};
//ScrollBar组件
class ScrollBar
{
public:
ScrollBar()
{
// cout << "Constructing a ScrollBar" << endl;
}
};
class MotifScrollBar : public ScrollBar
{
public:
MotifScrollBar()
{
cout << "Constructing a motifScrollBar" << endl;
}
};
class PMScrollBar : public ScrollBar
{
public:
PMScrollBar()
{
cout << "Constructing a pmScrollBar" << endl;
}
};
//测试程序
int _tmain(int argc, _TCHAR* argv[])
{
WidgetFactory *factory = new MotifWidgetFactory(); //动态绑定,指针
factory->CreateWindow();
factory->CreateScrollBar();
system("pause");
return 0;
}
- 数据库与工厂模式的思考
- 工厂模式的解读与思考
- 工厂模式的思考
- 设计模式与泡mm的关系之工厂模式及工厂模式的再思考
- 工厂模式与IOC模式对比思考
- 从简单工厂模式到抽象工厂模式的思考
- Java基础之工厂模式的思考
- c#winform:开发多语言应用程序---多国语言本地化与设计模式的思考----观察者模式+工厂模式!
- 工厂模式与抽象工厂的比较
- 简单工厂,工厂, 抽象工厂模式的学习与比较
- 策略模式与工厂模式的区别
- 创建者模式与工厂模式的区别
- 策略模式与工厂模式的区分
- 工厂方法模式与抽象工厂模式的区别
- 抽象工厂模式与工厂方法模式的区别
- 工厂方法模式与抽象工厂模式的区别
- 工厂方法模式与抽象工厂模式的区别
- 工厂方法模式与抽象工厂模式的区别
- chocolate buying
- OK , 开篇估计是唯一一个原创的文章了
- JasperReport 学习1
- 解决android使用google map时显示方格的问题
- jlink烧写Nor Flash时出错正确解决方法汇总:PC of target system has unexpected value after programming (2011
- 数据库与工厂模式的思考
- An example of the <sql> and <include> tags
- camp
- IOS 常用开源包 之 ASIHTTPRequest
- C语言暑期实习 第十天
- 网络编程_一个简单的聊天雏形
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver .
- explicit构造函数
- 使用history.back()出现"警告: 网页已过期的解决办法"