Structural Patterns Part 2/7: Bridge Pattern
来源:互联网 发布:石膏板隔音墙数据 编辑:程序博客网 时间:2024/05/29 16:32
Structural Patterns Part 2/7: Bridge Pattern
目录
- Structural Patterns Part 27 Bridge Pattern
- 目录
- Definition
- UML Class Diagram
- Implementation
Definition
Bridge Pattern是分离抽象和接口的模式,这样抽象的实现类就不用与接口紧密的耦合在一起了。
一句话:
Decouple an abstraction from its implementation so that the two can vary independently.
何时使用?当希望分离抽象类的接口和抽象类的具体实现类时。
使用频率: Medium
UML Class Diagram
Implementation
Phone类想要实现HeadSet接口从而达到可以听歌的效果。
这里就可以看出,抽象类Phone的具体实现类MOTO已经完全与HeadSet接口的实现类分离开来。
接口中的方法再也不用渗入到类里了。
MOTO既可以用 WiredHeadSet 来听歌,也可以随时切换到BluetoothHeadSet来听歌。
// HeadSet.javapackage designpatternsstructuralpatterns.bridge;import java.util.List;public interface HeadSet { void play(List<String> songs);}// HeadSetImpl.javapackage designpatternsstructuralpatterns.bridge;import java.util.List;class WiredHeadSet implements HeadSet { @Override public void play(List<String> songs) { System.out.println("The WiredHeadSet is Playing: "); for(String song: songs) { System.out.println("[" + song + "]"); } }}class BluetoothHeadSet implements HeadSet { @Override public void play(List<String> songs) { System.out.println("The BluetoothHeadSet is Playing: "); for(String song: songs) { System.out.println("[" + song + "]"); } }}// BridgeDemo.javapackage designpatternsstructuralpatterns.bridge;import java.util.*;public class BridgeDemo { public static void main(String[] args) { List<String> songs = new ArrayList<>(); songs.add("I want it that way"); songs.add("Bye bye bye"); songs.add("Flying without wings"); Phone phone = new MOTO(songs); phone.setHs(new WiredHeadSet()); phone.listen(); System.out.println(); System.out.println("WiredHeadSet >>>>>>> BluetoothHeadSet"); System.out.println(); phone.setHs(new BluetoothHeadSet()); phone.listen(); }}abstract class Phone { protected HeadSet hs; public HeadSet getHs() { return hs; } public void setHs(HeadSet hs) { this.hs = hs; } abstract void listen();}class MOTO extends Phone { private List<String> songs; public MOTO(List<String> songs) { this.songs = songs; } @Override void listen() { hs.play(songs); } }// outputThe WiredHeadSet is Playing: [I want it that way][Bye bye bye][Flying without wings]WiredHeadSet >>>>>>> BluetoothHeadSetThe BluetoothHeadSet is Playing: [I want it that way][Bye bye bye][Flying without wings]
0 0
- Structural Patterns Part 2/7: Bridge Pattern
- Structural Patterns Part 7/7: Proxy Pattern
- Structural Patterns Part 1/7: Adapter Pattern
- Structural Patterns Part 3/7: Composite Pattern
- Structural Patterns Part 4/7: Decorator Pattern
- Structural Patterns Part 5/7: Facade Pattern
- Structural Patterns Part 6/7: Flyweight Pattern
- Design Pattern - Structural Patterns - Bridge Pattern
- Design Pattern----Structural Patterns
- Design Pattern - Structural Patterns - Adapter Pattern
- [Special] Design Pattern - Structural Patterns - Proxy Pattern
- Design Pattern - Structural Patterns - Decorator Pattern
- Design Pattern - Structural Patterns - Composite Pattern
- Design Pattern - Structural Patterns - Facade Pattern
- Design Pattern - Structural Patterns - Flyweight Pattern
- Design Patterns - Bridge Pattern
- Behavioral Patterns Part 2/11: Command Pattern
- Creational Patterns Part 2/5: Abstract Factory Pattern
- JDK、J2EE、J2SE、J2ME的区别
- Mac下Lua Sublime Text2 开发环境搭建
- 3.2语法分析-上下文无关文法
- 便捷的宏定义
- python库Kivy中文乱码问题
- Structural Patterns Part 2/7: Bridge Pattern
- 大数据架构
- 工具网站
- java dom4j解析XML读取数据源配置的代码实例
- 解决DataNode Volume Failures故障
- 实例讲解基于 React+Redux 的前端开发流程
- HDOJ/HDU 1984 Mispelling4(删除第n个字符~)
- CF 开车找房子
- (二) E - E && hdoj 无限的路 【规律】