尧图精选

C++设计模式中的桥模式你了解吗

🕒 发布时间:2026/10/2 22:11:41 📁 来源:尧图网络
一职责模式:在软件组件的设计中如果责任划分的不清晰使用继承得到的结果往往是随着需求的变化子类急剧膨胀同时充斥着重复代码这时候的关键是划清责任。典型模式DecoratorBridgeBridge动机Motivation由于某些类型的固有的实现逻辑使得它们具有两个变化的维度乃至多个纬度的变化。如何应对这种“多维度的变化”如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化而不引入额外的复杂度模式定义将抽象部分(业务功能)与实现部分(平台实现)分离使它们都可以独立地变化。结构要点总结Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固 有的绑定关系使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自纬度的变化即“子类化”它们。Bridge模式有时候类似于多继承方案但是多继承方案往往违背 单一职责原则即一个类只有一个变化的原因复用性比较差。Bridge模式是比多继承方案更好的解决方法。Bridge模式的应用一般在“两个非常强的变化维度”有时一个 类也有多于两个的变化维度这时可以使用Bridge的扩展模式。cpp123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119classMessager {public:virtualvoidLogin(string username, string password) 0;virtualvoidSendMessage(string message) 0;virtualvoidSendPicture(Image image) 0;virtualvoidPlaySound() 0;virtualvoidDrawShape() 0;virtualvoidWriteText() 0;virtualvoidConnect() 0;virtual~Messager() {}};//平台实现classPCMessagerBase :publicMessager {public:virtualvoidPlaySound() {//**********}virtualvoidDrawShape() {//**********}virtualvoidWriteText() {//**********}virtualvoidConnect() {//**********}};classMobileMessagerBase :publicMessager {public:virtualvoidPlaySound() {//}virtualvoidDrawShape() {//}virtualvoidWriteText() {//}virtualvoidConnect() {//}};//业务抽象classPCMessagerLite :publicPCMessagerBase {public:virtualvoidLogin(string username, string password) {PCMessagerBase::Connect();//........}virtualvoidSendMessage(string message) {PCMessagerBase::WriteText();//........}virtualvoidSendPicture(Image image) {PCMessagerBase::DrawShape();//........}};classPCMessagerPerfect :publicPCMessagerBase {public:virtualvoidLogin(string username, string password) {PCMessagerBase::PlaySound();//********PCMessagerBase::Connect();//........}virtualvoidSendMessage(string message) {PCMessagerBase::PlaySound();//********PCMessagerBase::WriteText();//........}virtualvoidSendPicture(Image image) {PCMessagerBase::PlaySound();//********PCMessagerBase::DrawShape();//........}};classMobileMessagerLite :publicMobileMessagerBase {public:virtualvoidLogin(string username, string password) {MobileMessagerBase::Connect();//........}virtualvoidSendMessage(string message) {MobileMessagerBase::WriteText();//........}virtualvoidSendPicture(Image image) {MobileMessagerBase::DrawShape();//........}};classMobileMessagerPerfect :publicMobileMessagerBase {public:virtualvoidLogin(string username, string password) {MobileMessagerBase::PlaySound();//********MobileMessagerBase::Connect();//........}virtualvoidSendMessage(string message) {MobileMessagerBase::PlaySound();//********MobileMessagerBase::WriteText();//........}virtualvoidSendPicture(Image image) {MobileMessagerBase::PlaySound();//********MobileMessagerBase::DrawShape();//........}};voidProcess() {//编译时装配Messager* m newMobileMessagerPerfect();}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091classMessager {protected:MessagerImp* messagerImp;//...public:virtualvoidLogin(string username, string password) 0;virtualvoidSendMessage(string message) 0;virtualvoidSendPicture(Image image) 0;virtual~Messager() {}};classMessagerImp {public:virtualvoidPlaySound() 0;virtualvoidDrawShape() 0;virtualvoidWriteText() 0;virtualvoidConnect() 0;virtualMessagerImp() {}};//平台实现 nclassPCMessagerImp :publicMessagerImp {public:virtualvoidPlaySound() {//**********}virtualvoidDrawShape() {//**********}virtualvoidWriteText() {//**********}virtualvoidConnect() {//**********}};classMobileMessagerImp :publicMessagerImp {public:virtualvoidPlaySound() {//}virtualvoidDrawShape() {//}virtualvoidWriteText() {//}virtualvoidConnect() {//}};//业务抽象 m//类的数目1nmclassMessagerLite :publicMessager {public:virtualvoidLogin(string username, string password) {messagerImp-Connect();//........}virtualvoidSendMessage(string message) {messagerImp-WriteText();//........}virtualvoidSendPicture(Image image) {messagerImp-DrawShape();//........}};classMessagerPerfect :publicMessager {public:virtualvoidLogin(string username, string password) {messagerImp-PlaySound();//********messagerImp-Connect();//........}virtualvoidSendMessage(string message) {messagerImp-PlaySound();//********messagerImp-WriteText();//........}virtualvoidSendPicture(Image image) {messagerImp-PlaySound();//********messagerImp-DrawShape();//........}};voidProcess() {//运行时装配MessagerImp* mImp newPCMessagerImp();Messager* m newMessager(mImp);}总结本篇文章就到这里了希望能够给你带来帮助
上一篇/下一篇内容由系统自动关联 返回资讯列表 →