常说的设计模式是23种设计模式,分为3大类:
- 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型
- 结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合
- 行为型模式11种:模板方法、解释器、策略、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者。
上次咱们说了“代理模式”以及“静态代理”和“JDK动态代理”。今天咱们聊一聊结构型模式中的“桥接模式”。
结构型模式重点在于结构的变化。
“桥接模式”网上常见的,认可度最高的定义是:
“桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。”
但是要想理解这个定义,必须先要理解“抽象部分是什么”,“实现部分是什么”,而且“独立是什么意思?”。
可能对有些小伙伴有点困难,这次我们从另一个角度来看“桥接模式”。抛开定义直接考虑“桥接”这个词,实际和“嫁接”有点类似。
可以理解为,本来可以一个类搞定,我非要弄成两个类,让主体类“嫁接”另一个类的对象。
首先,有一个抽象类
这里只是一个抽象类,对于继承此抽象类的操作来说,它是父类。对于使用它的类来说,它只是其中一个属性。
由上面代码可以看出,本来“Implementor”的“operationImpl()”方法本可以直接写在“Abstraction”抽象类中,非要给分离出去写。从而能增加灵活性,而且细心的小伙伴能够发现,现在抽象类“Implementor”没有子类,只是在“Abstraction”抽象类中作为一个属性存在。其实最直接的结果就是,在设计“Abstraction”内部结构时,不用考虑也不用知道具体“Implementor”的子类是什么,反正到最后执行的时候,用什么子类都可以。因为继承抽象类必须实现其抽象方法。
现在我们实现“Abstraction”和“Implementor”的子类
“ConcreteImplementorA”继承“Implementor”
“RefinedAbstraction”继承“Abstraction”
实际调用的时候,我们对属性赋的值就是Implementor的子类对象。
又到了讲故事的环节了,这次还是来设置一个《西游记》里的场景,主人公仍然是猪八戒。要知道,猪八戒在被猴子收服之前叫“猪悟能”。但是再往前看它可是天蓬元帅下凡。
事情是这样的,天蓬元帅掌管天界水兵,由于调戏嫦娥被贬下凡,不料错投了猪胎,从而长成这副模样。
一个猪的身躯里住着一个天蓬元帅的灵魂。
如果打架,“看似猪的攻击,却蕴含着神的力量”你说厉害不厉害。
所以可以理解为,在猪崽儿生下来的时候,“桥接”了天蓬元帅的灵魂。用“桥接模式”表现出来就是这样的:
灵魂的抽象类具备灵魂攻击
肉体抽象类具备物理攻击
实现猪的身体继承身体的抽象类
猪的身体
实现天蓬元帅的灵魂继承灵魂的抽象类
天蓬元帅的灵魂
应用时:
测试效果