结构型设计模式---桥接模式(Bridge)
来源:互联网 发布:郑州市儿童编程教育 编辑:程序博客网 时间:2024/06/05 03:13
桥接模式:使用组合的方式将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化。
Bridge.h
#ifndef _BRIDGE_H_
#define _BRIDGE_H_
class TimeImp
{
public:
TimeImp(int hr, int min);
virtual ~TimeImp() {}
void virtual tell();
protected:
int hr_, min_;
};
class CivilianTimeImp: public TimeImp
{
public:
CivilianTimeImp(int hr, int min, int pm);
void tell();
protected:
char pm_[8];
};
class CivilianTimeImp: public TimeImp
{
public:
CivilianTimeImp(int hr, int min, int pm);
void tell();
protected:
char pm_[8];
};
class ZoneTimeImp: public TimeImp
{
public:
ZoneTimeImp(int hr, int min, int zone);
void tell();
protected:
char zone_[32];
};
class Time
{
public:
Time();
virtual ~Time();
Time(int hr, int min);
void tell();
protected:
TimeImp * imp_;
};
class CivilianTime: public Time
{
public:
CivilianTime(int hr, int min, int pm);
};
class ZoneTime: public Time
{
public:
ZoneTime(int hr, int min, int zone);
};
#endif
Bridge.cpp
#include <iostream>
#include "Bridge.h"
#include "string.h"
using std::cout;
using std::endl;
TimeImp::TimeImp(int hr, int min)
{
hr_ = hr;
min_ = min;
}
void TimeImp::tell()
{
cout << "current time is " << hr_ << ":" << min_ << endl;
}
CivilianTimeImp::CivilianTimeImp(int hr, int min, int pm):TimeImp(hr, min)
{
if (pm > 12)
strcpy(pm_, "PM");
else
strcpy(pm_, "AM");
}
void CivilianTimeImp::tell()
{
cout << "current civilian time is " << hr_ << ":" << min_ << ":" << pm_ << endl;
}
ZoneTimeImp::ZoneTimeImp(int hr, int min, int zone):TimeImp(hr, min)
{
if (6 == zone)
strcpy(zone_, "Sinkiang");
else
strcpy(zone_, "Beijing");
}
void ZoneTimeImp::tell()
{
cout << "current zone time is " << hr_ << ":" << min_ << ":" << zone_ << endl;
}
Time::Time()
{
}
Time::~Time()
{
if (NULL != imp_)
{
delete imp_;
imp_ = NULL;
}
}
Time::Time(int hr, int min)
{
imp_ = new TimeImp(hr, min);
}
void Time::tell()
{
imp_->tell();
}
CivilianTime::CivilianTime(int hr, int min, int pm)
{
imp_ = new CivilianTimeImp(hr, min, pm);
}
ZoneTime::ZoneTime(int hr, int min, int zone)
{
imp_ = new ZoneTimeImp(hr, min, zone);
}
main.cpp
#include "Bridge.h"
int main()
{
Time *tm[3];
tm[0] = new Time(11, 22);
tm[1] = new CivilianTime(10, 20, 20);
tm[2] = new ZoneTime(9, 30, 6);
for (int i = 0; i < 3; ++i)
{
tm[i]->tell();
delete tm[i];
}
return 0;
}
Makefile
cc=g++
exe=main
obj= main.o Bridge.o
$(exe): $(obj)
$(cc) -o $(exe) $(obj)
main.o: Bridge.h
$(cc) -c main.cpp
Prototype.o: Bridge.h
$(cc) -c Bridge.cpp
clean:
rm -rf *o $(exe)
output:
current time is 11:22
current civilian time is 10:20:PM
current zone time is 9:30:Sinkiang
- 设计模式--桥接模式Bridge(结构型)
- 结构型设计模式---桥接模式(Bridge)
- 设计模式(结构型)之桥接模式(Bridge Pattern)
- 【设计模式】结构型模式之桥接Bridge
- 设计模式-结构型- 桥接模式(Bridge)
- 设计模式(7)--Bridge(桥接模式)--结构型
- Bridge桥接模式(结构型模式)
- Bridge 桥接模式(结构型模式)
- 结构型模式--Bridge桥接模式
- 结构型模式-Bridge ( 桥接模式 )
- BRIDGE桥接设计模式(结构型)
- 设计模式之桥接模式(Bridge)--结构模型
- 设计模式(十二)桥模式(Bridge)-结构型
- 设计模式中结构型模式(二)桥接模式(Bridge)
- 设计模式之桥接模式(Bridge)之一(Photoshop示例) 结构型模式
- 设计模式之桥接模式(Bridge)之二(手机示例) 结构型模式
- 设计模式之桥接模式(Bridge)之三(典型结构图) 结构型模式
- 【设计模式学习笔记八】【结构型模式】【桥接模式(Bridge)】
- setSize和setPreferredSize的区别与应用
- HDFS High Availability Using the Quorum Journal Manager
- HDOJ题目1879继续畅通工程(基础最小生成树)
- POJ 2752 Seek the Name, Seek the Fame KMP题解
- awk使用
- 结构型设计模式---桥接模式(Bridge)
- Chromium学习笔记(一)——Chromium框架及进程模型
- G2介绍
- Box2d 要点大全
- DDoS恶意攻击高发 趋势教你如何防御
- 模板方法模式--封装算法
- 3d文件格式规范001---obj格式
- Qt自定义事件的实现
- Rabbitmq集群高可用测试