Structural Patterns Part 2/7: Bridge Pattern
2016-06-02 13:41
351 查看
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.java package designpatternsstructuralpatterns.bridge; import java.util.List; public interface HeadSet { void play(List<String> songs); } // HeadSetImpl.java package 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.java package 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); } } // output The WiredHeadSet is Playing: [I want it that way] [Bye bye bye] [Flying without wings] WiredHeadSet >>>>>>> BluetoothHeadSet The BluetoothHeadSet is Playing: [I want it that way] [Bye bye bye] [Flying without wings]
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用