桥接模式

一、模式提出的背景: 

尽量使用合成/聚合,尽量不要使用类的继承,使用它有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小的规模,并且不太可能增长为不可控制的庞然大物。将抽象的部分与它的实现部分分离,使它能够独立变化,通俗一点就是:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们变化,减少他们之间的耦合。

二、代码的业务背景: 
有品牌手机,每一种品牌手机的软件不一样,需求就是手机的品牌是变化的,软件也是动态增加的,两者如何解耦?
         三、UML类图: 



四、代码解说

客户端调用

package bridge.com;
/**
 *  @author DELL
 *
 */
public class ClientCall {
public static void main(String[] args){
	/**
	 * 首先要生成一系列的软件对象
	 */
	AbstractSoft softGame=new GameSoft();
	AbstractSoft softAddress=new AddressSoft();
	/**
	 * 客户想要哪个品牌的手机并且
	 * 该款手机想要什么样的软件功能
	 */
	PhotoBrand pbA=new PhotoBrandA();//手机品牌A
	pbA.setSoft(softGame);//往手机品牌注入想要的手机软件功能
	pbA.setSoft(softAddress);
	pbA.run();//运行手机软件
	
	PhotoBrand pbB=new PhotoBrandB();//手机品牌B
	pbB.setSoft(softGame);
	pbB.setSoft(softAddress);
	pbB.run();
}
}

第一个手机抽象软件类文件:

package bridge.com;


public abstract class AbstractSoft {
	public abstract void run();//把手机软件抽象出来
	
}

 第二个手机品牌抽象类文件:

package bridge.com;

import java.util.ArrayList;
import java.util.List;

public abstract class PhotoBrand {
	//手机品牌软件抽象出来,
	protected List<AbstractSoft> listSoft=new ArrayList<AbstractSoft>();
	//把手机软件注入到品牌手机里面运行
	public void setSoft(AbstractSoft abstractSoft){
		listSoft.add(abstractSoft);
	}
	//抽象出方法运行手机注入的相关软件
	public abstract void run();
}

 第三个手机通讯软件文件:

package bridge.com;
//手机的通讯软件
public class AddressSoft extends AbstractSoft {
	@Override
	public void run() {
		System.out.println("手机软件: 通信地址正在运行!");
	}

}

第四个手机游戏软件文件:

package bridge.com;
//手机游戏软件
public class GameSoft extends AbstractSoft {
	@Override
	public void run() {
		System.out.println("手机软件: 游戏正在运行!");
	}

}

 第五个手机品牌A文件:

package bridge.com;
//手机品牌A
public class PhotoBrandA extends PhotoBrand {
	@Override
	//运行客户注入的相关软件
	public void run() {
		System.out.println("手机品牌A的功能如下:");
		for(AbstractSoft as:this.listSoft){
			as.run();
		}
	}
}

 第六个手机品牌B文件:

package bridge.com;

public class PhotoBrandB extends PhotoBrand {

	@Override
	public void run() {
		System.out.println("手机品牌B的功能如下:");
		for(AbstractSoft as:this.listSoft){
			as.run();
		}
	}

}

运行的结果:

手机品牌A的功能如下:
手机软件: 游戏正在运行!
手机软件: 通信地址正在运行!
手机品牌B的功能如下:
手机软件: 游戏正在运行!
手机软件: 通信地址正在运行!

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值