关闭

桥接模式

标签: 设计模式java
200人阅读 评论(0) 收藏 举报
分类:

桥接模式在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
	}

}

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7508次
    • 积分:278
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类