模板网站对排名的影响,wap网站微信一键登录,网站建设相关参考资料,室内装潢装修学校写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用#xff0c;主要是下面的UML图可以起到大作用#xff0c;在你学习过一遍以后可能会遗忘#xff0c;忘记了不要紧#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。
桥接模式#xff08;Bridge主要是下面的UML图可以起到大作用在你学习过一遍以后可能会遗忘忘记了不要紧只要看一眼UML图就能想起来了。同时也请大家多多指教。
桥接模式Bridge
是一种行为型模式。
目录
一、概述
1.1、主要的角色如果有点懵的话就先跳过着小部分
1.2、直观的理解桥接模式要干什么
1.3、上述手机应用例子的UML图
二、桥接模式的模板
2.1、对象之间的关系用UML图表示如下
2.2、Java版的代码如下 一、概述 1、将抽象部分与它的实现部分分离使它们都可以独立地变化 2、实现是指抽象类以及抽象类的派生类对于它们的实现类。这些实现类应该分离 3、和 合成|聚合复用原则 相关 4、实现系统可能有多角度分类每一种分类都有可能变化那么就把这种多角度分离出来让它们独立变化减少它们之间的耦合。 1.1、主要的角色如果有点懵的话就先跳过
主要的角色分两种但从代码或技术实现的角度看为了充分使用面向对象语言的3大特性封装、继承、多态还另外需要抽象类或接口可能有4个 实现类实现类的抽象类或接口 实现类新提取的类新提取的类的抽象类或接口 新提取的类的实现类 1.2、直观的理解桥接模式要干什么
以手机应用软件为例我们有各种需要如想和人聊天那么就用微信如想购物那么就用淘宝等。并且对于我们不同的手机有着不同的操作系统一样可以使用这些软件来满足我们某方面的需求。 现在假设你是应用程序开发者你需要在开发出微信和淘宝并且你还要让它们可以在鸿蒙或者苹果手机上运行 如果按照以前的思路那肯定是把微信开发两个版本分别运行在鸿蒙和苹果系统上同样淘宝也是开发两个这个例子比较简单这样做的话只要设计四个对象即可但万一又有新的需求这样就并不一定好使了。就假设现在要开发10个软件并且都适配4个系统那么按照以前的思路那你需要设计 10*440 个对象 如果再多点呢那工作量将是难以想象并且你也清除有很多重复适配工作的。 我们可以这样把操作系统和应用软件分开看 应用软件都定义一个统一的接口每个应用软件只针对自己要完成的功能进行实现如微信对接口具体实现的是聊天淘宝对接口的具体实现是购物。操作系统也都定义一个统一的运行应用程序的接口每个操作系统针对接口的具体实现是完成对任何一个应用软件对象的正常运行。 这样再结合多态就可以实现上面概念里的第一句话‘将抽象部分与它的实现部分分离使它们都可以独立地变化’也就是抽象分离出两部分操作系统 应用软件 并且它们两可以独立增加或减少。 此时你可能会发现对于手机应用程序来说他有着不同的维度如功能维度和运行环境维度。像这种一个事物但是对应多个维度也就是说某个目标对象可以被抽象出多个抽象类那么就可以尝试使用桥接模式这样也就符合合成|聚合复用原则。
想简单了解原则的可以点击下面链接
设计模式2——原则篇极简版
1.3、上述手机应用例子的UML图 这样子把操作系统和应用软件分开那么就需要建6个类。对于之前说的‘要开发10个软件并且都适配3个系统’的话就不需要40个对象了而是104216个对象。其中有2个是操作系统和应用软件的抽象类 如何使用也就是主程序要怎么调用这些对象 先填装在使用。 如可以给鸿蒙系统填装一个应用然后调用操作系统的运行接口就可以让此应用运行。 注本例是以操作系统和应用程序看成一个一个类对象为角度从而可以让操作系统和应用各自实现各自的统一接口而现实生活中并非如此
对应上文的角色分类在本例种把应用软件看为解决原本问题的实现类而操作系统是在此基础上又新提取或抽象出的新提取的类。从代码角度讲新提取的类是主程序最终调用的类而实现类是被新提取的类调用刚好对应我们点击图标后操作系统接收到我们触摸屏幕的信号然后再启动应用程序。
再举例物品-----对应颜色维度和形状维度
二、桥接模式的模板
2.1、对象之间的关系用UML图表示如下 2.2、Java版的代码如下
实现类抽象
abstract class Implementor {public abstract void operation();
}具体的实现类1
public class ConcreteImplementor1 extends Implementor{Overridepublic void operation() {System.out.println(具体实现1的方法执行);}
}具体的实现类2
public class ConcreteImplementor2 extends Implementor{Overridepublic void operation() {System.out.println(具体实现2的方法执行);}
}抽象分类对象抽象
abstract class Abstraction {protected Implementor implementor;public void setImplementor(Implementor implementor) {this.implementor implementor;}public abstract void operation();
}提炼后的抽象分类对象A
public class RefinedAbstractionA extends Abstraction {Overridepublic void operation() {System.out.println(提炼后的A);implementor.operation();}
}提炼后的抽象分类对象B
public class RefinedAbstractionB extends Abstraction {Overridepublic void operation() {System.out.println(提炼后的B);implementor.operation();}
}主程序发起请求的类
public class Main {public static void main(String[] args) {Abstraction abstraction;abstraction new RefinedAbstractionA();abstraction.setImplementor(new ConcreteImplementor1());abstraction.operation();abstraction.setImplementor(new ConcreteImplementor2());abstraction.operation();System.out.println(------------------);abstraction new RefinedAbstractionB();abstraction.setImplementor(new ConcreteImplementor1());abstraction.operation();abstraction.setImplementor(new ConcreteImplementor2());abstraction.operation();}
}
这里暂时就不再例其它编程语言的例子了可以把上面的Java例子复制到你本地运行main函数试一下加深理解。这些代码都是我自己学习的时候根据一些教材手敲的不存在bug可以直接运行。
如果觉得本文还不错就请点个赞给作者一点鼓励吧如果有建议也请评论指教和讨论