桥接模式

桥接模式在23种设计模式中是属于 结构性 的模式

既然是结构性的,那么就要突显出在软件的设计结构中的优势

现在我们来假设一种情形,然后用代码来实现

情景:幼儿园的老师教小孩动物,动物中有猫,狗等,一个幼儿园有几个班,每个班有一个白板,老师教课的过程就是叫有动物的贴纸贴在白板上。

分析:老师作为控制台,动物贴纸由老师动手贴在白板上,黑板是死物,它不会知道贴在上面的是什么东西。这个过程就是实现在有多个黑板多种贴纸的情形下,控制台对贴纸的操作。

过程:我们就直接从桥接模式开始,不要一步步引入了。贴纸是被动的东西,那就要设计一个贴纸的接口  Paster   ,每种动物贴纸实现这个接口,来两种,猫和狗,CatPasterImpt和DogPasterImpt。    下来就是承接贴纸的白板,来个抽象类  Board ,两种白板 Board_1_Abs 和  Board_2_Abs。老师就是控制台了,Host类有mian方法。

Board 和Paster  是聚合的关系。

Paster 和实现这个接口类的代码

public interface Paster {
	public void call(); 
}


public class CatPasterImpt implements Paster {

	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println("This is a Cat paster");
	}

}


public class DogPasterImpt implements Paster{

	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println("This is a Dog paster");
	}

}


Board 和继承它的类的代码


public abstract class Board {
	public Paster paster;
	public Board(Paster paster){
		this.paster=paster;
	}
	
	public abstract void showPeople();
}


public class Board_1_Abs extends Board {

	public Board_1_Abs(Paster paster) {
		super(paster);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void showPeople() {
		// TODO Auto-generated method stub
		System.out.print("this is board_1  now I will show you ");
		paster.call();
	}

}



public class Board_2_Abs extends Board {

	public Board_2_Abs(Paster paster) {
		super(paster);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void showPeople() {
		// TODO Auto-generated method stub
		System.out.print("this is board_2  now I will show you ");
		paster.call();
	}

}

最后控制台的代码

public class Host {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Board board1_a=new Board_1_Abs(new CatPasterImpt());
		board1_a.showPeople();//输出 this is board_1  now I will show you This is a Cat paster
		
		Board board1_b=new Board_1_Abs(new DogPasterImpt());
		board1_b.showPeople();//输出 this is board_1  now I will show you This is a Dog paster	

		Board board2_a=new Board_2_Abs(new CatPasterImpt());
		board2_a.showPeople();//输出 this is board_2  now I will show you This is a Cat paster
		
		Board board2_b=new Board_2_Abs(new DogPasterImpt());
		board2_b.showPeople();//输出 this is board_2  now I will show you This is a Dog paster
	}

}

这个设计模式的使用的情况就是有两种角色,这两种角色的个体有多种组合,并且作为承接作用的角色(白板)被承接的角色(贴纸)是完全没有选择的功能,选择权完全在调用承接作用的角色的控制台(老师)上。这样这两种角色就可以灵活组合,完全依照控制台的意志做组合,这样两种角色之间也算是耦合性不高了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值