adapter.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include<iostream>
  2. #include<vector>
  3. //适配器模式
  4. //适配器模式的核心是对原有的接口进行封装,并且对原有的数据类型进行重整的一种设计模式
  5. //我们有如下这样的数据
  6. struct point //一个点
  7. {
  8. int x,y;
  9. };
  10. struct line
  11. {
  12. point begin;
  13. point end;
  14. };
  15. //目标用户的函数(一般来自与库或者框架)对数据有特殊要求
  16. void aim_fun(std::vector<line> rectangle) //目标函数期待传入一个矩形
  17. {}
  18. //但是我们设计的数据只有点和线,即我们需要对我们的数据进行拼装以适应对应的框架
  19. class adapter_lazy //懒汉式
  20. {
  21. private:
  22. line& line_1;
  23. line& line_2;
  24. line& line_3;
  25. line& line_4;
  26. std::vector<line> rectangle;
  27. public:
  28. adapter_lazy(line& a,line& b,line& c,line& d):line_1(a),line_2(b),line_3(c),line_4(d){}
  29. std::vector<line> create()
  30. {
  31. rectangle.emplace_back(line_1);
  32. rectangle.emplace_back(line_2);
  33. rectangle.emplace_back(line_3);
  34. rectangle.emplace_back(line_4);
  35. return rectangle;
  36. }
  37. };
  38. class adapter_hungry //懒汉式
  39. {
  40. private:
  41. std::vector<line> rectangle;
  42. public:
  43. adapter_hungry(line& line_1,line& line_2,line& line_3,line& line_4):rectangle(){
  44. rectangle.emplace_back(line_1);
  45. rectangle.emplace_back(line_2);
  46. rectangle.emplace_back(line_3);
  47. rectangle.emplace_back(line_4);
  48. }
  49. std::vector<line> create()
  50. {
  51. return rectangle;
  52. }
  53. };
  54. int main()
  55. {
  56. }