桥接模式
用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
比如:妓院里有几女小红,小芳,小燕子。三个嫖客小亮,小乐,小黑6个人。需要通过老鸨要把这几个女生分给男生,可以有很多种情况,红-亮,芳-亮,芳-乐...。
源码:
1 public interface LaoBao { 2 //心里想法 3 void 嫖客(); 4 }
1 /** 2 * 小乐 3 */ 4 public class Le implements LaoBao{ 5 6 @Override 7 public void 嫖客() { 8 System.out.println("我喜欢小芳"); 9 } 10 11 } 12 13 /** 14 * 小亮 15 */ 16 public class Liang implements LaoBao{ 17 18 @Override 19 public void 嫖客() { 20 System.out.println("我喜欢小红"); 21 } 22 23 } 24 25 /** 26 * 小黑 27 */ 28 public class Hei implements LaoBao{ 29 30 @Override 31 public void targetAreaB() { 32 System.out.println("我喜欢小燕子"); 33 } 34 35 }1 public abstract class 妓女们{ 2 //引用月老接口 3 LaoBao laobao; 4 //女生名称 5 abstract void name(); 6 }1 /** 2 * 小红 3 */ 4 public class Hong extends 妓女们{ 5 6 @Override 7 void name() { 8 System.out.println("我是小红"); 9 } 10 11 } 12 13 /** 14 * 小芳 15 */ 16 public class Fang extends 妓女们 { 17 18 @Override 19 void name() { 20 System.out.println("我是小芳"); 21 } 22 23 } 24 25 /** 26 * 小燕子 27 */ 28 public class Yan extends 妓女们 { 29 30 @Override 31 void name() { 32 System.out.println("我是小燕子"); 33 } 34 35 }1 public class Clienter { 2 public static void main(String[] args) { 3 妓女们 a = new Hong();4 a.laobao = new Liang(); 5 a.name(); 6 a.laobao.想法(); 7 } 8 }输出:我是小亮我喜欢小芳
桥接口绑定的一方都是被调用者,属于被动方,通过实现桥接口的方式
抽象方法属于主动方,通过继承来进行扩展(引用桥接口)
桥接是一个接口,它与一方应该是绑定的,也就是解耦的双方中的一方必然是继承这个接口的,这一方就是实现方,而另一方正是要与这一方解耦的抽象方,如果不采用桥接模式,一般我们的处理方式是直接使用继承来实现,这样双方之间处于强链接,类之间关联性极强,如要进行扩展,必然导致类结构急剧膨胀。采用桥接模式,正是为了避免这一情况的发生,将一方与桥绑定,即实现桥接口,另一方在抽象类中调用桥接口(指向的实现类),这样桥方可以通过实现桥接口进行单方面扩展,而另一方可以继承抽象类而单方面扩展,而之间的调用就从桥接口来作为突破口,不会受到双方扩展的任何影响。