Structural Patterns Part 2/7: Bridge Pattern
Structural Patterns Part 2/7: Bridge Pattern
目录
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]