java合成聚和例子_合成聚合原则(示例代码)
1、合成聚合原则定义
又叫做合成复用原则(Composite ReusePrinciple或CRP),尽量使用对象组合,而不是继承来达到复用的目的。就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。简而言之,要尽量使用合成/聚合,尽量不要使用继承。
2、合成的定义
合成(组合):表示一个整体与部分的关系,指一个依托整体而存在的关系(整体与部分不可以分开),例如:一个人对他的房子和家具,其中他的房子和家具是不能被共享的,因为那些东西都是他自己的。并且人没了,这个也关系就没了。虽然组合表示的是一个整体与部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同生共死的关系。在组合关系中,成员类是整体类的一部分,而且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。在UML中,组合关系用带实心菱形的直线表示。
public class Head
{ private Mouth mouth;
public Head()
{ mouth = new Mouth();
}
}
public class Mouth
{
}
3、聚合的定义
聚合:聚合是比合成关系更弱的一种拥有关系,也表示整体与部分的关系(整体与部分可以分开),例如,一个奔驰S360汽车,对奔驰S360引擎,奔驰S360轮胎的关系..这些关系就是带有聚合性质的。在面向对象中的聚合:通常在定义一个整体类后,再去分析这个整体类的组成结构,从而找出一些成员类,该整体类和成员类之间就形成了聚合关系。在聚合关系中,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。
比如汽车和汽车引擎:
public class Car
{
private Engine engine;
public Car(Engine engine)
{
this.engine = engine;
}
public void setEngine(Engine engine)
{ this.engine = engine;
}
}
public class Engine
{
}
3、原则分析
1)在面向对象设计中,可以通过两种基本方法在不同的环境中复用已有的设计和实现,即通过组合/聚合关系或通过继承。
继承复用:实现简单,易于扩展。破坏系统的封装性;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;只能在有限的环境中使用。
组合/聚合复用:耦合度相对较低,选择性地调用成员对象的操作;可以在运行时动态进行。
2)组合/聚合可以使系统更加灵活,类与类之间的耦合度降低,一个类的变化对其他类造成的影响相对较少,因此一般首选使用组合/聚合来实现复用;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用。
3)此原则和里氏代换原则氏相辅相成的,两者都是具体实现"开-闭"原则的规范。违反这一原则,就无法实现"开-闭"原则。
4、两者之间的区别:依赖和关联
依赖是类与类之间的连接,表示一个类依赖于另外一个类的定义。依赖关系仅仅描述了类与类之间的一种使用与被使用的关系,在Java中体现为局部变量、方法的参数或者是对静态方法的调用。
依赖关系UML类图:
static class Boat{
public static void row(){
System.out.println("开动");
}
}
class Person{
public void crossRiver(Boatboat){
boat.row();
}
public void fishing(){
Boat boat =new Boat() ;
boat.row();
}
public void patrol(){
Boat.row() ;
}
}
关联是类与类之间的连结。关联关系使一个类知道另外一个类的属性和方法。关联可以是双向的,也可以是单向的。体现在Java中,关联关系是通过成员变量来实现的。
一般关联关系UML类图:
class Computer{
public void develop(){
System.out.println("Develop ");
}
}
class Person{
private Computer computer ;
public Person(Computer computer){
this.computer = computer ;
}
public void work(){
computer.develop() ;
System.out.println("work");
}
}
参考博文链接:
java合成聚和例子_合成聚合原则(示例代码)相关推荐
- java 数字转换流量_流量充值示例代码
流量充值 package api.jisuapi.flowrecharge; import java.io.UnsupportedEncodingException; import java.secu ...
- java星座查询系统_星座查询示例代码
package api.jisuapi.astro; import api.util.HttpUtil; import net.sf.json.JSONArray; import net.sf.jso ...
- java条码识别技术_条码识别示例代码
package api.binstd.barcode; import api.util.HttpUtil; import net.sf.json.JSONArray; import net.sf.js ...
- java if语句例子_实例学习if语句用法
我们前面学习了java中的for循环和do while语法及原理的相关内容,同样是java三大控制语句之一的选择语句,在实际的项目开发中使用频率也非常高,今天我们来学习选择语句中if语句用法和相关内容 ...
- java memento_Java备忘录(Memento)模式实现的示例代码
Java备忘录(Memento)模式实现的示例代码 /** * 数据对象 * @author stone * */ public class DataState { private String ac ...
- java 图像合成加相框_合成走进相框人物照片效果的PS教程
今天和大家分享一下PS的合成技术,适合新手练习,大家可以学习,喜欢的朋友可以参考. 先看看效果图 1. 打开图片相框,按快捷键"Ctrl+J"复制图层 2. 单击"钢笔工 ...
- java生成缩略图例子_具体介绍java生成缩略图的方法示例代码
这篇文章主要介绍了java生成缩略图的方法,结合具体实例形式分析了java生成缩略图过程中所涉及的各种常见的图形处理技巧,需要的朋友可以参考下 本文实例讲述了java生成缩略图的方法.分享给大家供大家 ...
- servlet3异步 例子_异步Servlet示例
servlet3异步 例子 Async servlet was introduced in Servlet 3. It's a great way to deal with thread starva ...
- java.time.format例子_java格式化时间示例
实现日期的格式化,需要用到类: java.text.DateFormat DateFormat没有可以直接使用的构造函数,一般使用DateFormate的子类---java.text.SimpleDa ...
最新文章
- 巴菲特在佛罗里达大学的演讲
- VMWare安装Linux系统之CentOS-6.6
- MVC案例——模糊查询
- 新建虚拟机Ubuntu16.4安装搜狗输入法的问题
- C#编程(四十八)----------列表
- sql中字段名中包含特殊字符的查询方法
- scp命令:服务器间远程复制代码
- modem建链过程详述
- Git初学札记(四)————Git Push的常规操作与Pull冲突解决
- 指令系统相兼容的计算机称为系列机,第4章指令系统.ppt
- 自动驾驶(二十)---------Waymo数据集
- 7本软书,助你打破职场天花板
- 【Nodejs】使用request批量下载MP3,文件数量内容都没问题
- 关于fcitx无法切换输入法的问题解决
- log4j日志文件默认存放路径
- 几个有创意有趣的网站推荐
- 生成对抗网络的发展与应用
- 个人信用报告内容组成和解读(五)信贷交易信息明细
- SemanticKitti数据集的使用
- JS__this,arguments,克隆,三目运算符__渡一
热门文章
- 6、从键盘接收一百分制成绩(0~100),要求输出其对应的成绩等级A~E。其中,90分以上为‘A‘,80~89分为‘B‘,70~79分为‘C‘,60~69分为‘D‘,60分以下为‘E‘。
- Chrome关闭非安全站点证书检查
- java 多线程 张孝祥_多线程11_张孝祥 java5的线程锁技术
- 利用形心公式计算曲面积分
- 笔试算法《简单密码》
- microblaze c语言,MicroBlaze
- ZOJ-3802:Easy 2048 Again(2048游戏 状态压缩dp)
- 全新的移动互联网,互联网营销
- 2021年中国机械100大企业排行榜:上海汽车集团股份有限公司位居榜首,年度销售收入高达7421.32亿元(附年榜TOP100详单)
- 高抛低吸,谁都知道,为什么还亏钱?