大白话 设计模式之桥连模式

定义

桥接模式(bridge):将抽象部分与实现部分分离,使它们都可以独立的变化.

从定义来看,抽象的简直看不了,那么通俗点讲,我们怎么理解桥接模式呢?

我们再举一个例子,假设你是一个地主,你有两个管家,两个工人,那么每天你怎么指挥他们呢,你可以告诉管家A让工人1去干活,同时也可以告诉管家B让工人2去工作,或者管家A去指挥工人2,管家B去指挥工人1, 你可以自由组合这种变化,管家和工人之间也没有什么依赖,他们都可以独立的变化,那么我们再把管家和工人的职责和具体的人再分离,是不是就印证了定义呢? 将抽象部分和实现部分分离,使他们都可以独立的变化? 那么我们就实现了一个桥接模式了.

好像还是有点绕,那么我们来看看具体代码怎么去实现:

首先,我们先抽象一个管家的职责,这个管家的职责,就是管理工人工作:

public abstract class HouseKeep{
protected Work work;

public HouseKeep(Work work) {
    this.work = work;
}

void manage() {
    this.work.work();
}
}

接下来我们实现A和B两个管家:

public class HouseKeeperA extends HouseKeep {
public HouseKeeperA(Work work) {
	super(work);
}

public void manage() {
	System.out.println("管家A指派");
	super.manage();
}
}

public class HouseKeeperB extends HouseKeep {

public HouseKeeperB(Work work) {
	super(work);
}

public void manage() {
	System.out.println("管家B指派");
	super.manage();
}
}

接着我们抽象一个工人的职责,工人的职责当然就是工作了:

public interface Work {
void work();
}

再接着我们实现两个工作的工人:

public class woker1 implements Work {
public void work() {
System.out.println("工人1工作");
}	
}

public class worker2 implements Work {
	public void work() {
	System.out.println("工人2工作");
	}
	
}

好了,现在我们就可以随心所意的指挥他们了:

public class clinet {

public static void main(String[] args) {
	//你让管家A指挥工人1
    HouseKeep keep = new HouseKeeperA(new woker1());
    keep.manage();

	//你让管家A指挥工人2
    keep = new HouseKeeperA(new worker2());
    keep.manage();

	//你让管家B指挥工人1
    keep = new HouseKeeperB(new woker1());
    keep.manage();

	//你让管家B指挥工人2
    keep = new HouseKeeperB(new worker2());
    keep.manage();
}
}

来让我们看看他们都还听话吗:

管家A指派工人1工作
管家A指派工人2工作
管家B指派工人1工作
管家B指派工人2工作

结果还不错,我们把具体的工作和工作的人做了分离,并且可以让他们随意的组合,独立的变化,那么这不就是桥接模式吗?

原文地址:https://www.cnblogs.com/j2eeDevelper/p/5203906.html