桥接模式

原创 2015年07月09日 23:58:32

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

}

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


相关文章推荐

桥接模式示例

  • 2017年10月26日 09:22
  • 17KB
  • 下载

桥接模式Demo

  • 2017年06月09日 13:46
  • 19.47MB
  • 下载

virtualbox 设置桥接模式

题主的机子是mac air,由于需要学习linux,装了个virtualbox,其上运行一个ubuntu系统 虚拟系统刚装好的时候其实是可以上网的,默认的网络连接方式是网络地址转换(NAT),如图,...

delphi桥接模式

  • 2012年08月08日 16:28
  • 2.71MB
  • 下载

桥接模式 C++ 实现

  • 2014年05月21日 20:08
  • 32KB
  • 下载

使用OpenVPN的桥接模式扩展内部局域网

1.背景 OpenVPN是一款高度可扩展的VPN软件,除了既有的将应用客户端安全接入服务器这一传统功能外,还可以让你无缝的接入一个远程的局域网,正如你身在该局域网一样,如果你不用OpenVPN,你将...
  • dog250
  • dog250
  • 2011年10月01日 20:44
  • 22074

java 桥接模式

  • 2011年12月25日 19:45
  • 2KB
  • 下载

Android桥接模式demo

  • 2016年04月13日 16:51
  • 15.44MB
  • 下载

在VMware虚拟机下使用桥接模式访问外网的方法

原文地址::http://blog.csdn.net/qq_31387691/article/details/54863090 相关文章 1、怎样Linux虚拟机如何怎样桥接上外网----...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:桥接模式
举报原因:
原因补充:

(最多只允许输入30个字)