跟装饰器模式一样,设计上属于职责划分,要划清责任,分清主体和拓展,解决的是(随着需求变化,子类数目极具膨胀的问题)
头文件
#pragma once #includeusing namespace std; template //这里用了下类的前向声明,不然编译过不去 class My_character; template class My_weapons { public: virtual void fire() {} }; template class weapons_gun:public My_weapons { public: virtual void fire() { cout << "武器:火枪 对目标造成伤害" << endl;//平时这里是算法 } }; template class weapons_knife :public My_weapons { public: virtual void fire() { cout << "武器:军刀 对目标造成伤害" << endl; } }; template class weapons_rocket :public My_weapons { public: virtual void fire() { cout << "武器:火箭 对目标造成伤害" << endl; } }; template class My_character { public: My_character(My_weapons * Weapon) :wea(Weapon) {} My_weapons * wea; virtual void attack(My_character * target) { wea->fire(); } }; template class My_soldier :public My_character { public: My_soldier(My_weapons * Weapon) :My_character (Weapon) {} }; template class My_enemy :public My_character { public: My_enemy(My_weapons * Weapon) :My_character (Weapon) {} };
接口
cout << "测试桥模式" << endl; weapons_gun* gun1 = new weapons_gun (); //auto gun3 = new weapons_gun (); //My_weapons * gun4 = new weapons_gun ();//这两种方法用也可以 My_soldier * soldier1 = new My_soldier (gun1); weapons_knife * knife1 = new weapons_knife (); My_soldier * soldier2 = new My_soldier (knife1); weapons_rocket * rocket1 = new weapons_rocket (); My_soldier * soldier3 = new My_soldier (rocket1); weapons_gun * gun2 = new weapons_gun (); My_enemy * enemy1 = new My_enemy (gun2); weapons_knife * knife2 = new weapons_knife (); My_enemy * enemy2 = new My_enemy (knife2); weapons_rocket * rocket2 = new weapons_rocket (); My_enemy * enemy3 = new My_enemy (rocket2); soldier1->attack(enemy1); soldier2->attack(enemy2); soldier3->attack(enemy3);



