Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330463
  • 博文数量: 49
  • 博客积分: 653
  • 博客等级: 上士
  • 技术积分: 646
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-01 22:43
文章分类

全部博文(49)

文章存档

2018年(1)

2017年(4)

2015年(1)

2014年(6)

2013年(8)

2012年(24)

2011年(5)

分类: C/C++

2017-05-18 21:11:53

1 目的
 将一个类的接口转换成客户希望的另外一个接口。adapter 模式使得原本由于接口不兼容

而不能一起工作的那些类可以一起工作。
 有时,为复用而设计的工具箱类不能够被复用的原因仅仅是因为它的接口与专业应用领
域所需要的接口不匹配

2 使用场景
 想使用以及存在的类, 但是他的接口不满足需求
 
想创建一个可以复用的类, 该类可以与其他不相关的类一起协同工作

3 使用方式
 类适配器使用多重继承对一个接口与另一个接口进行匹配
 
对象匹配器依赖于对象组合


点击(此处)折叠或打开

  1. #include<iostream>
  2. #include <deque>
  3. using namespace std;
  4. class Deque {
  5. public:
  6.     void push_back(int x) { cout << "push back data " << x << "\n";}
  7.     void push_front(int x) { cout << "push front data " << x << "\n";}
  8.     void pop_back() { cout << "pop back\n"; }
  9.     void pop_front() { cout << "pop front\n"; }
  10. };

  11. class Sequence {
  12. public:
  13.     virtual ~Sequence(){}
  14.     virtual void pop() = 0;
  15.     virtual void push(int x) = 0;
  16. };
  17. // 栈 后进后出
  18. class Stack : public Sequence {
  19. public:
  20.     void pop() { deque.pop_back(); }
  21.     void push(int x) { deque.push_back(x); }
  22. private:
  23.     Deque deque;
  24. };
  25. //队列 后进前出
  26. class Queue : public Sequence {
  27. public:
  28.     void pop() { deque.pop_front(); }
  29.     void push(int x) { deque.push_back(x); }
  30. private:
  31.     Deque deque;
  32. };

  33. int main(int argc, char* argv[]) {
  34.     Sequence *s1 = new Stack();
  35.     Sequence *s2 = new Queue();
  36.     s1->push(1); s1->pop();
  37.     s2->push(1); s2->pop();
  38.     delete s1; delete s2;
  39.     return 0;
  40. }


编译文件
Makefile

点击(此处)折叠或打开

  1. # set CPUS for Linux or FreeBSD
  2. CPUS := $(shell cat /proc/cpuinfo|grep -c processor)
  3. GCC472_PATH=/usr/local/gcc-4.7.2
  4. CXX := env LD_LIBRARY_PATH=$(GCC472_PATH)/lib:/usr/local/mpc/lib $(GCC472_PATH)/bin/g++
  5. CXXFLAGS := -g3 -O2 -fno-strict-aliasing -Wall -Werror -fPIC \
  6. -isystem /usr/local/include \
  7. -isystem /usr/include
  8. LDFLAGS := -pthread \
  9. -L/usr/local/lib64/ \
  10. -L/usr/local/lib/
  11. RTFLAGS := \
  12. -Wl,-rpath=.. \
  13. -Wl,-rpath=/$(GCC472_PATH)/lib64
  14. LIBS := -lpthread
  15. SRC := $(wildcard *.cc)
  16. OBJ := $(patsubst %.cc, %.o, $(SRC))
  17. DEP := $(patsubst %.o, %.d, $(OBJ))
  18. TARGET := main_test
  19. all:
  20. $(MAKE) -j$(CPUS) target
  21. main_test: $(OBJ)
  22. $(CXX) $^ -o $@ $(RTFLAGS) $(LDFLAGS) $(LIBS)
  23. target: $(TARGET)
  24. %.o : %.cc
  25. $(CXX) -c $(CXXFLAGS) $< -o $@
  26. %.d : %.cc
  27. @$(CXX) -MM $< $(CXXFLAGS) | sed 's/$(notdir $*)\.o/$(subst /,\/,$*).o $(subst /,\/,$*).d/g' > $@
  28. clean:
  29. -rm -rf $(OBJ) $(TARGET) *.core $(DEP) *_unittest
  30. test: all
  31. ./main_test
  32. .PHONY: all target clean test

阅读(1454) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~