c++设计模式之桥模式
视频地址:
https://www.ixigua.com/6804249883344634380?id=6803643064515559944
文档整理地址:
http://t.csdn.cn/mrdWP
重构前类图:
重构前样例代码:
1 class Messager { 2 public: 3 virtual void Login(string username, string password) = 0; 4 virtual void SendMessage(string message) = 0; 5 virtual void SendPicture(Image image) = 0; 6 7 virtual void PlaySound() = 0; 8 virtual void DrawShape() = 0; 9 virtual void WriteText() = 0; 10 virtual void Connect() = 0; 11 12 virtual ~Messager() {} 13 }; 14 15 //平台实现 16 17 class PCMessagerBase : public Messager { 18 public: 19 20 virtual void PlaySound() { 21 //********** 22 } 23 virtual void DrawShape() { 24 //********** 25 } 26 virtual void WriteText() { 27 //********** 28 } 29 virtual void Connect() { 30 //********** 31 } 32 }; 33 34 class MobileMessagerBase : public Messager { 35 public: 36 37 virtual void PlaySound() { 38 //========== 39 } 40 virtual void DrawShape() { 41 //========== 42 } 43 virtual void WriteText() { 44 //========== 45 } 46 virtual void Connect() { 47 //========== 48 } 49 }; 50 51 //业务抽象 52 53 class PCMessagerLite : public PCMessagerBase { 54 public: 55 56 virtual void Login(string username, string password) { 57 58 PCMessagerBase::Connect(); 59 //........ 60 } 61 virtual void SendMessage(string message) { 62 63 PCMessagerBase::WriteText(); 64 //........ 65 } 66 virtual void SendPicture(Image image) { 67 68 PCMessagerBase::DrawShape(); 69 //........ 70 } 71 }; 72 73 74 75 class PCMessagerPerfect : public PCMessagerBase { 76 public: 77 78 virtual void Login(string username, string password) { 79 80 PCMessagerBase::PlaySound(); 81 //******** 82 PCMessagerBase::Connect(); 83 //........ 84 } 85 virtual void SendMessage(string message) { 86 87 PCMessagerBase::PlaySound(); 88 //******** 89 PCMessagerBase::WriteText(); 90 //........ 91 } 92 virtual void SendPicture(Image image) { 93 94 PCMessagerBase::PlaySound(); 95 //******** 96 PCMessagerBase::DrawShape(); 97 //........ 98 } 99 }; 100 101 class MobileMessagerLite : public MobileMessagerBase { 102 public: 103 104 virtual void Login(string username, string password) { 105 106 MobileMessagerBase::Connect(); 107 //........ 108 } 109 virtual void SendMessage(string message) { 110 111 MobileMessagerBase::WriteText(); 112 //........ 113 } 114 virtual void SendPicture(Image image) { 115 116 MobileMessagerBase::DrawShape(); 117 //........ 118 } 119 }; 120 121 class MobileMessagerPerfect : public MobileMessagerBase { 122 public: 123 124 virtual void Login(string username, string password) { 125 126 MobileMessagerBase::PlaySound(); 127 //******** 128 MobileMessagerBase::Connect(); 129 //........ 130 } 131 virtual void SendMessage(string message) { 132 133 MobileMessagerBase::PlaySound(); 134 //******** 135 MobileMessagerBase::WriteText(); 136 //........ 137 } 138 virtual void SendPicture(Image image) { 139 140 MobileMessagerBase::PlaySound(); 141 //******** 142 MobileMessagerBase::DrawShape(); 143 //........ 144 } 145 }; 146 147 void Process() { 148 //编译时装配 149 Messager* m = new MobileMessagerPerfect(); 150 }
重构后类图:
重构后样例代码:
1 class Messager { 2 protected: 3 MessagerImp* messagerImp;//... 4 public: 5 virtual void Login(string username, string password) = 0; 6 virtual void SendMessage(string message) = 0; 7 virtual void SendPicture(Image image) = 0; 8 9 virtual ~Messager() {} 10 }; 11 12 class MessagerImp { 13 public: 14 virtual void PlaySound() = 0; 15 virtual void DrawShape() = 0; 16 virtual void WriteText() = 0; 17 virtual void Connect() = 0; 18 19 virtual MessagerImp() {} 20 }; 21 22 //平台实现 n 23 class PCMessagerImp : public MessagerImp { 24 public: 25 26 virtual void PlaySound() { 27 //********** 28 } 29 virtual void DrawShape() { 30 //********** 31 } 32 virtual void WriteText() { 33 //********** 34 } 35 virtual void Connect() { 36 //********** 37 } 38 }; 39 40 class MobileMessagerImp : public MessagerImp { 41 public: 42 43 virtual void PlaySound() { 44 //========== 45 } 46 virtual void DrawShape() { 47 //========== 48 } 49 virtual void WriteText() { 50 //========== 51 } 52 virtual void Connect() { 53 //========== 54 } 55 }; 56 57 //业务抽象 m 58 59 //类的数目:1+n+m 60 61 class MessagerLite :public Messager { 62 63 64 public: 65 66 virtual void Login(string username, string password) { 67 68 messagerImp->Connect(); 69 //........ 70 } 71 virtual void SendMessage(string message) { 72 73 messagerImp->WriteText(); 74 //........ 75 } 76 virtual void SendPicture(Image image) { 77 78 messagerImp->DrawShape(); 79 //........ 80 } 81 }; 82 83 84 class MessagerPerfect :public Messager { 85 86 87 public: 88 89 virtual void Login(string username, string password) { 90 91 messagerImp->PlaySound(); 92 //******** 93 messagerImp->Connect(); 94 //........ 95 } 96 virtual void SendMessage(string message) { 97 98 messagerImp->PlaySound(); 99 //******** 100 messagerImp->WriteText(); 101 //........ 102 } 103 virtual void SendPicture(Image image) { 104 105 messagerImp->PlaySound(); 106 //******** 107 messagerImp->DrawShape(); 108 //........ 109 } 110 }; 111 112 void Process() { 113 //运行时装配 114 MessagerImp* mImp = new PCMessagerImp(); 115 Messager* m = new Messager(mImp); 116 }