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

桥接模式解析

桥接模式

  1. 意图
    • 将抽象与其实现相分离,使得两者可以独立变化。
  2. 解释
    案例:考虑武器有不同的特效,你想让不同的武器可以有不同的特效,你应该怎么做? 为每个武器创建不同的副本使得有不同的特效,还是你只单独创建单独的属性,在武器需要该属性时装配上即可。桥接模式可以让你有第二种选择。
    简单说: 桥接模式更喜欢组合模式而不是继承模式,这种模式使得实现的细节从一个对象的层次结构到另一个对象的层级结构。
  3. 样例
    //特效属性
    public interface Enchantment {void onActive();void apply();void onDeactive();
    }
    
    //飞行特效
    public class FlyingEnchantment implements Enchantment{@Overridepublic void onActive() {System.out.println("The item begins to glow faintly");}@Overridepublic void apply() {System.out.println("The item flies strikes the enemies finally returning to owner's hand");}@Overridepublic void onDeactive() {System.out.println("The items's glow fades");}
    }
    //噬魂特效
    public class SoulEatingEnchantment implements Enchantment{@Overridepublic void onActive() {System.out.println("The item spreads bloodlust");}@Overridepublic void apply() {System.out.println("The item eats the soul of enemies");}@Overridepublic void onDeactive() {System.out.println("The item stops spreading bloodlust");}
    }
    
    //武器
    public interface Weapon {void wield();void swing();void unwield();Enchantment getEnchantment();
    }
    
    //锤子
    public class Hammer implements Weapon{private final Enchantment enchantment;public Hammer(Enchantment enchantment) {this.enchantment = enchantment;}@Overridepublic void wield() {System.out.println("The hammer is wielded");enchantment.onActive();}@Overridepublic void swing() {System.out.println("The hammer is swinged");enchantment.apply();}@Overridepublic void unwield() {System.out.println("The hammer is unwielded");}@Overridepublic Enchantment getEnchantment() {return enchantment;}
    }
    //剑
    public class Sword implements Weapon{private final Enchantment enchantment;public Sword(Enchantment enchantment) {this.enchantment = enchantment;}@Overridepublic void wield() {System.out.println("This sword is wielded");enchantment.onActive();}@Overridepublic void swing() {System.out.println("The sword is swinged");enchantment.apply();}@Overridepublic void unwield() {System.out.println("The sword is unwielded");enchantment.onDeactive();}@Overridepublic Enchantment getEnchantment() {return enchantment;}
    }
    public class Main {public static void main(String[] args) {System.out.println("The knight receives an enchanted sword");var enchantedSword = new Sword(new SoulEatingEnchantment());enchantedSword.wield();enchantedSword.swing();enchantedSword.unwield();System.out.println("The valkyries receives an enchanted hammer");var enchantedHammer = new Hammer(new FlyingEnchantment());enchantedHammer.wield();enchantedHammer.swing();enchantedHammer.unwield();}
    }
    

在这里插入图片描述

  1. 结构图

在这里插入图片描述

  1. 适用性

相关文章:

  • 【vue】vue.config.js里面获取本机ip:
  • QML语法 | 导入语句(import)
  • WPF自定义控件,聚合器模式传递消息
  • 面试题整理
  • C语言每日一题(49)二叉树的三种基本遍历方法
  • Web开发8:前后端分离开发
  • 华为笔记本matebook pro X如何扩容 C 盘空间
  • 解析PDF二维码:数字时代文件管理的创新之道
  • 【数据结构:顺序表】
  • mysql之基本查询
  • 51单片机点灯
  • 数字身份保护:Web3如何改变个人隐私观念​
  • YOLOv8实例分割实战:TensorRT加速部署
  • 基于STM32的CAN通信协议选择与实现
  • LeetCode_16_中等_最接近的三数之和
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • git 常用命令
  • Github访问慢解决办法
  • hadoop集群管理系统搭建规划说明
  • MySQL几个简单SQL的优化
  • nodejs:开发并发布一个nodejs包
  • spring-boot List转Page
  • 力扣(LeetCode)22
  • 前端存储 - localStorage
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 写给高年级小学生看的《Bash 指南》
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ###C语言程序设计-----C语言学习(6)#
  • #HarmonyOS:基础语法
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (11)MSP430F5529 定时器B
  • (C语言)共用体union的用法举例
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (六)vue-router+UI组件库
  • (篇九)MySQL常用内置函数
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)母版页和相对路径
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • **PHP分步表单提交思路(分页表单提交)
  • .env.development、.env.production、.env.staging
  • .NET : 在VS2008中计算代码度量值
  • .net 反编译_.net反编译的相关问题
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .NET性能优化(文摘)
  • .net专家(高海东的专栏)
  • @FeignClient注解,fallback和fallbackFactory