您的位置:首页 > 其它

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息