栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用组合/聚合的方式来代替继承

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用组合/聚合的方式来代替继承

在设计模式原则中有“组合/聚合复用原则”,结合网上的相关资料和文章,得出自己个人的理解并在此记录下。
首先,我们要明确为什么要使用组合/聚合的方式来代替继承?
1、降低耦合度,子类通过继承父类,可以达到代码重用的目的。但同时也意味着子类必须全盘继承父类的属性和方法,不需要的属性和方法继承会造成污染,当父类的方法变更时也会影响到子类。因此,出于降低代码耦合的角度考虑,应该避免直接继承有具体方法实现的父类。
2、提高灵活性,由于java单继承的特点,无法同时使用多个类的特征,通过在类中创建不同工具类的方式,可以实现对不同类的调用。子类重写的父类方法,实现的都是一种静态的复用。不能在运行时发生改变,灵活性比较差。如果在子类中创建所需的工具类对象,则可以在使用过程中调用相关的类,以此提高代码的灵活性。

在清楚了为什么要用组合/聚合的方式来代替继承之后,接下来我们再来明确下组合与聚合的概念以及区别:

1、组合方式:A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生。

2、聚合方式:A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它。

最后看一下这两种方式的具体实现:

组合

class Plane{
	public void fly(){}
}
class Ship{
	public void swim(){}
}
class ManKind {
	private Plane p = new Plane();
	private Ship s = new Ship();
	public void fly(){
		p.fly();
	}
	public void swim(){
		s.swim();
	}
}

聚合

//交通工具接口
interface Vehicle{
	public  void run();
}
//自行车实现类
class Bike implements Vehicle{
	public void run(){
		System.out.println("骑单车行走");
	}
}
//汽车实现类
class Car implements Vehicle{
	public void run(){
		System.out.println("开汽车行走");
	}
}
//人类
class CDMan {
	private Vehicle  v;
	public void run(){
		v.run();
	}
//更换交通工具
	public void changeVehicle(Vehicle  v){
		this.v = v;
	}
}
……
CDMan c = new CDMan();
c.changeVehicle(new Bike());
c.run();//骑单车行走
c.changeVehicle(new Car());
c.run();//开汽车行走
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889069.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号