数据库与工厂模式的思考

最近一直忙着硬件调试,闲来看看数据库和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;
}

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值