当前位置: 首页 > news >正文

保定自助建站软件网站建设与开发的收获与体会

保定自助建站软件,网站建设与开发的收获与体会,wordpress的站点是什么,邯郸怎样做网站桥接模式是一种结构型设计模式#xff0c;它是将抽象部分和实现部分隔离#xff0c;通过组合关系将抽象部分和实现部分解耦#xff0c;使它们可以独立变化。 因此#xff0c;桥接模式可以很好的处理两个或两个以上维度的变化。 举一个例子说明#xff1a; 假设我们现在…桥接模式是一种结构型设计模式它是将抽象部分和实现部分隔离通过组合关系将抽象部分和实现部分解耦使它们可以独立变化。 因此桥接模式可以很好的处理两个或两个以上维度的变化。 举一个例子说明 假设我们现在要设计一款游戏初步需求是有两个角色Casa 和 Titan和两把武器Pistol手枪和 Anchor船锚。其中Casa是一个射手她配备的武器是PistolTitan是一个战士配备的武器是Anchor。 我们如果不用桥接模式的话可能会这样实现 // 卡莎角色 class CasaCharacter { public:CasaCharacter(){this-weapon_ Pistol;this-damage_ 10;}// 攻击void Attack(){std::cout weapon_ 开始攻击伤害为 damage_ std::endl;}private:// 武器std::string weapon_;// 伤害int damage_; };// 泰坦角色 class TitanCharacter { public:TitanCharacter(){this-weapon_ Anchor;this-damage_ 20;}// 攻击void Attack(){std::cout weapon_ 开始攻击伤害为 damage_ std::endl;}private:// 武器std::string weapon_;// 伤害int damage_; };测试 void TestBridge() {std::shared_ptrCasaCharacter casa std::make_sharedCasaCharacter();casa-Attack();std::shared_ptrTitanCharacter titan std::make_sharedTitanCharacter();titan-Attack(); }int main() {// 策略模式用法// TestStrategy();// TestObserver();// TestDecorator();TestBridge();system(pause);return 0; }输出 Pistol开始攻击伤害为10 Anchor开始攻击伤害为20我们实现了两个类分别是Casa角色类和Titan角色类在构造函数里设置角色的武器和伤害实现了攻击方法。 假如现在我们的需求变了Casa不仅可以配备手枪还可以配备船锚、Titan也不仅可以配备船锚还可以配备手枪。我们现在要实现这个需求只能再加两个类在构造函数里设置武器和伤害。这样的设计可能会导致类的爆炸式增长同时也不利于扩展和维护。 并且这样的实现导致我们的测试代码是一种编译时装配我们希望我们的程序尽可能是运行时装配这样可以写成“活”的。 接下来使用桥接模式实现 class IWeapon { protected:// 武器名字std::string weapon_name_;// 武器伤害int damage_;public:virtual ~IWeapon() {}virtual void Attack() 0;std::string GetWeaponName(){return weapon_name_;} };// 抽象角色类 class ICharacter { protected:std::shared_ptrIWeapon weapon_;public:virtual ~ICharacter(){}virtual void Fight() 0;void SelectWeapon(std::shared_ptrIWeapon _weapon){this-weapon_ _weapon;} };// Casa角色 class Casa: public ICharacter {public:virtual void Fight() override{std::cout weapon_-GetWeaponName() 开始攻击 std::endl;weapon_-Attack();} };// Titan角色 class Titan: public ICharacter {public:virtual void Fight() override{std::cout weapon_-GetWeaponName() 开始攻击 std::endl;weapon_-Attack();} };// Pistol武器 class Pistol: public IWeapon { public:Pistol(){weapon_name_ 手枪;damage_ 10;hit_rate_ 0.1;}virtual void Attack() override{std::cout weapon_name_ 造成伤害 damage_ * (1 hit_rate_) std::endl;}private:// 暴击率double hit_rate_; };// Anchor武器 class Anchor: public IWeapon { public:Anchor(){weapon_name_ 船锚;damage_ 20;}virtual void Attack() override{std::cout weapon_name_ 造成伤害 damage_ std::endl;} };void TestBridge() {// Casa角色std::shared_ptrICharacter casa std::make_sharedCasa();// Titan角色std::shared_ptrICharacter titan std::make_sharedTitan();// Pistol武器std::shared_ptrIWeapon pistol std::make_sharedPistol();// Anchor武器std::shared_ptrIWeapon anchor std::make_sharedAnchor();// 给角色装备武器casa-SelectWeapon(pistol);titan-SelectWeapon(anchor);// 角色开始打架casa-Fight();titan-Fight(); }int main() {// 策略模式用法// TestStrategy();// TestObserver();// TestDecorator();TestBridge();system(pause);return 0; }输出 手枪开始攻击 手枪造成伤害11 船锚开始攻击 船锚造成伤害20使用桥接模式实现了抽象角色类和抽象武器类具体角色Casa类、具体角色Titan类、具体武器Pistol类、具体武器Anchor类。 测试代码我们通过SelectWeapon给角色装备武器实现了运行时装配。这样我们就可以随意的给角色装备武器。 我们可以发现通过桥接模式实现了松耦合并且角色和武器之间的关系是组合关系我们可以随意的组合角色和武器任意一方发生变化都不会对另一方造成影响也就是两个或两个以上维度的独立变化。 桥模式的主要思想是通过将一个可变的抽象部分和一个可变的实现部分分离开来从而使得它们可以独立地变化相互之间不会造成影响。因此桥模式可以很好的处理两个或两个以上变化的维度它可以写出更好的代码也便于代码的维护和扩展。 可以对比以上代码来理解这段话。 要点总结 Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系。使得抽象和实现可以沿着各自的维度来变化。所谓的抽象和实现可以沿着各自的维度来变化即“子类化”它们。Bridge模式其实类似于多继承方案但是多继承方案往往违背单一职责原则即一个类只有一个变化的原因复用性比较差。Bridge模式一般应用于“两个非常强的变化维度”有时一个类也有多于两个的变化维度这时可以使用Bridge的扩展模式。 装饰模式和桥接模式的区别 装饰模式动态地给一个对象增加额外的功能让这个对象变得更加复杂。 桥接模式将抽象部分和实现部分隔离开使它们都可以独立地变化。 桥接模式是用合成的方式实现多个对象之间的“组合”而装饰模式是用继承的方式实现多个对象之间的“聚合”。 桥接模式的耦合度更低多维度的东西可以拥有自己的属性和方法即角色和武器两个维度有自己的属性和方法。装饰模式使用继承必然拥有相同的属性和方法。 装饰模式示例 二者对比大家就会发现 桥接模式是为了实现多个没有关联的维度的东西自由组合这里的没有关联是指它们拥有各自的属性和方法没有相同点。装饰模式使用了继承必然是两个种类具有相同的属性和方法它不是为了实现两个维度之间的自由组合而是为了实现对对象之间的一层又一层包装调用方法时每一层包装递归的调用上一层的包装。
http://www.hkea.cn/news/14429519/

相关文章:

  • 长沙服装网站建设微信小程序分销商城
  • 网站引导页怎么做.黄金网站app免费视频大全
  • 高校网站建设汇报做网站一个月工资
  • 手机怎么做淘客网站网站商城网络整合营销
  • 淘宝网站建设策划案从用户旅程角度做网站分析
  • 图片类网站欣赏怎么注册企业邮箱免费注册
  • 网站建设需要哪些必备文件手机网站app制作公司
  • 科研网站怎么建设官方网站搭建要多少钱
  • 黄南州wap网站建设公司网站推广的途径和要点
  • 1元做网站方案江阴企业网站制作
  • 重庆如何做聚政网站网页无法访问此页面怎么办?网页打不开怎么解决
  • 网站发布文章怎么才能让百度收录关键词搜索广告
  • 专门做养老院的网站wordpress 源文件导入
  • 培训网站设计小程序开发制作工具
  • 优秀的电商设计网站有哪些昆明平台网站开发
  • photoshop制作网站海报阿里巴巴推广平台
  • 企业网站自己怎么做石家庄网络公司行业
  • 动态ip上做网站电商货源平台
  • 做网站容易还是编程容易关键词优化方法有什么步骤
  • 网站开发发和后台开发有什么区别品牌建设实施细则
  • 建网站_网站内容怎么做电子政务门户网站建设教训
  • 推广优化公司网站互联网营销师培训班
  • 医院网站实例短视频优化
  • 顺德网站建设服务平台成都活动策划公司
  • 网页设计购物网站建设c2c商城网站建设方案
  • 个人博客网站建设业务盐城公司做网站
  • 音乐网站建设方案注册网站安全吗
  • 制作微网站的平台wordpress文章排序错误
  • 自驾游网站建设方案河北省城乡住房和建设厅网站
  • 一个公司可以备案几个网站登录wordpress数据库