传统方式 不利于 将来扩展
Bridge Pattern
The Phone Question
// Brand.java
public interface Brand {
void open();
void close();
void call();
}
// XiaoMi.java
public class XiaoMi implements Brand{
public void open() {
System.out.println("XiaoMi Open");
}
public void close() {
System.out.println("XiaoMi Close");
}
public void call() {
System.out.println("XiaoMi calling");
}
}
//Vivo.java
public class Vivo implements Brand{
public void open() {
System.out.println("Vivo open");
}
public void close() {
System.out.println("Vivo close");
}
public void call() {
System.out.println("Vivo calling");
}
}
// Phone.java
public abstract class Phone {
//组合品牌
private Brand brand;
public Phone(Brand brand){
this.brand = brand;
}
protected void open(){
brand.open();
}
protected void close(){
brand.close();
}
protected void call(){
brand.call();
}
}
//FoldedPhone.java
public class FoldedPhone extends Phone{
public FoldedPhone(Brand brand){
super(brand); //调用父类的构造器,这里基本上都使用父类的方法。
}
public void open(){
super.open();
System.out.println("Folded Phone open");
}
public void close(){
super.close();
System.out.println("Folded Phone close");
}
public void call(){
super.call();
System.out.println("Folded Phone calling");
}
}
//UpRightPhone.java
public class UpRightPhone extends Phone{
public UpRightPhone(Brand brand){
super(brand);
}
public void open(){
super.open();
System.out.println("UpRight Phone Open");
}
public void close(){
super.close();
System.out.println("UpRight Phone Close");
}
public void call(){
super.call();
System.out.println("UpRight Phone Calling");
}
}
//Client.java
public class Client {
public static void main(String[] args) {
Phone phone = new FoldedPhone(new XiaoMi());
phone.call();
phone.close();
phone.open();
}
}