前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[设计模式]之六:桥接模式

[设计模式]之六:桥接模式

作者头像
wOw
发布2018-09-18 15:33:45
3730
发布2018-09-18 15:33:45
举报
文章被收录于专栏:wOw的Android小站wOw的Android小站

合成/聚合复用原则CARP

尽量使用合成/聚合,尽量不要使用类继承

  • 聚合Aggregation 表示一种弱的’拥有’关系,体现A对象可以包含B对象,但B对象不是A对象的一部分
  • 合成Composition 表示一种强的’拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样

比如,大雁和翅膀属于合成,大雁和雁群属于聚合

这个原则的好处是,优先使用对象的合成/聚合将有助于你保持每个类被封禁,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

比如,A,B,C三种操作系统,X,Y,Z三种软件。每个系统都有这三种软件时,会发现一共有9种情况。

按照继承,有两种情况:

  1. 设计OS父类,ABC继承OS,ABC下分别有一个XYZ
  2. 设计Software父类,XYZ继承Software,XYZ下各有ABC三种版本

这时候,增加一种OS或者Software,再或者增加父类的方法,带来的影响就很大,导致最后规模越来越大。

定义

桥接模式将抽象部分与它实现的部分分离,使它们都可以独立地变化。

“将抽象部分与它的实现部分分离”指的是,前面的OS和Software有两种实现方式,现在就是要把这些实现分离开,独立出来,让它们各自变化。

UML

示例代码

代码语言:javascript
复制
// 软件类统一实现ISoftware接口
interface ISoftware {
	public void run();
}

public class Software_X implements ISoftware {

	@Override
	public void run() {
		System.out.println("Run software A");
	}

}

public class Software_Y implements ISoftware {

	@Override
	public void run() {
		System.out.println("Run software Y");
	}

}
// OS类统一继承IOS  因为软件和OS属于聚合关系,OS持有一个software的引用
abstract class IOS {
	protected ISoftware software;
	public void setSoftware(ISoftware sw) {
		this.software = sw;
	}
	
	public abstract void run();
}

public class OS_A extends IOS {

	@Override
	public void run() {
		System.out.println("OSA");
		software.run();
	}

}

public class OS_B extends IOS {

	@Override
	public void run() {
		System.out.println("OSB");
		software.run();
	}

}
//客户代码
public class main {

	public static void main(String[] args) {
		IOS os = new OS_A();
		os.setSoftware(new Software_X());
		os.run();
		
		os.setSoftware(new Software_Y());
		os.run();
		
		os = new OS_B();
		os.setSoftware(new Software_X());
		os.run();
		
		os.setSoftware(new Software_Y());
		os.run();
		
	}

}
//输出
OSA
Run software A
OSA
Run software Y
OSB
Run software A
OSB
Run software Y
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 合成/聚合复用原则CARP
  • 定义
  • UML
  • 示例代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档