合成设计模式的引出

引用传递实际应用

案例一(类关联结构)

有的人有一辆汽车,有些人坐公交;要求通过面向对象的设计来解决实现以上的这种关系转换。

class Car{private String name;private double price;private Person person;//车应该属于一个人public Car(String name,double price){this.name = name ;this.price = price;} public void setPerson(Person person){this.person  person;}public String getInfo(){return "汽车型号:"+"汽车价值"+this.price;}
}
class Person{private String name;private int age;private Car car;//一个人有一辆车public Person(String name,int age){this.name = name;this.age = age;}public void setCar(Car car){this.car= car;}public Car getCar(){rerurn this.car;}public String getInfo(){return "姓名"+this.name+"年龄"+this.age;}
}
public class Demo{public static void mian(String args[]){//第一步,声明对象并且设置彼此的关系Person person = new Person("张三",12);Car car = new Car("小米",1000.23);person.setCar(car);//一个人有一辆车car.setPerson(person);//一辆车属于一个人//第二步,相应关系获取数据System.out.println(person.getCar().getInfo());System.out.println(car.getPerson().getInfo());}
}
//本次操作两个自定义的数据类型,Person和Car都可以描述某一群体,现在是针对群体的关系做出的一种设置。

案例二(自身关联结构)

现在确定了人与车的关系,现在想做进一步的操作完善;一个人以后会有孩子,孩子长大后也会有车。

class Car {private String name ;private double price ;private Person person ;    // 车应该属于一个人public Car(String name,double price) {this.name = name ;this.price = price ;}public void setPerson(Person person) {this.person = person ;}public Person getPerson() {return this.person ;}public String getInfo() {return "汽车品牌型号:" + this.name + "、汽车价值:" + this.price ;}
}
class Person {private String name ;private int age ;private Car car ;   // 一个人有一辆车private Person children [] ; // 一个人有多个孩子public Person(String name,int age) {this.name = name ;this.age = age ;}public void setChildren(Person children[]) {this.children = children ;}public Person [] getChildren() {return this.children ;}public void setCar(Car car) {this.car = car ;}public Car getCar() {return this.car ;}public String getInfo() {return "姓名:" + this.name + "、年龄:" + this.age ;}
}
public class ArrayDemo {public static void main(String args[]) {// 第一步:声明对象并且设置彼此的关系Person person = new Person("吴硕",29) ;Person childA = new Person("林强",18) ;Person childB = new Person("郭仁义",19) ;childA.setCar(new Car("BMW X1",300000.00)) ;  // 匿名对象childB.setCar(new Car("法拉利",1500000.00)) ; // 匿名对象person.setChildren(new Person [] {childA,childB}) ;  // 一个人有多个孩子Car car = new Car("宾利",8000000.00) ;person.setCar(car) ;  // 一个人有一辆车car.setPerson(person) ;   // 一辆车属于一个人// 第二步:根据关系获取数据System.out.println(person.getCar().getInfo()) ;    // 代码链System.out.println(car.getPerson().getInfo()) ;// 根据人找到所有的孩子以及孩子对应的汽车for (int x = 0 ; x < person.getChildren().length ; x ++) {System.out.println("\t|- " + person.getChildren()[x].getInfo()) ;System.out.println("\t\t|- " + person.getChildren()[x].getCar().getInfo()) ;}}
}

案例三(合成设计模式)

定义一种可以描述电脑组成的类,这样的状态下必须进行拆分,电脑可以分成两个部分:显示器,主机(主机上有一系列的硬件)。

class 电脑 {private 显示器 对象数组 [] ;private 主机 对象 ;
}
class 显示器 {}
class 主机 {private 主板 对象 ;private 鼠标 对象 ;private 键盘 对象 ;
}
class 主板 {private 内存 对象数组 [] ;private CPU 对象数组 [] ;private 显卡 对象 ;private 硬盘 对象数组 [] ;
}
class 键盘 {}
class 鼠标 {}
class 内存 {}
class CPU {}
class 显卡 {}
class 硬盘 {}

任何人类的产品都是可以拆分的,然后进行重新组合,这样的设计在java之中被称为合成设计模式。

Java基础(十二)相关推荐

  1. c++二进制文件java读取int_吃透Java基础十二:IO

    一.什么是IO流 Java中将输入输出抽象称为流,就好像水管,将两个容器连接起来.流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流. 按数据来源(去向) ...

  2. Java实习生常规技术面试题每日十题Java基础(二)

    目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...

  3. 深入Java基础(二)——字符串家族

    上一篇写了基本数据类及其包装类详解,这篇我们就来讨字符串这个家族吧,这个也是重中之重啊!!! 文章结构: 1.众说纷纷的equals和==: 2.字符串家族的基本知识以及字符串家族的源码解读: 3.字 ...

  4. Java校招笔试题-Java基础部分(二)

    导语   Java面试题集2021版 Java基础部分二 14.hashCode方法的作用? 15.写clone()方法时,通常都有一行代码,这行代码是什么? 16.静态变量和实例变量的区别? 17. ...

  5. Java基础(二):集合、IO流(Zip压缩输入/输出流等)、File文件类、反射、枚举

    Java基础(一):编译和解释.数据类型.变量作用域.String常用方法.数组.面向对象.异常 Java基础(二):集合.IO流(Zip压缩输入/输出流等).File文件类.反射.枚举 Java异常 ...

  6. java基础(十) 深入理解数组类型

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 1. 数组类简介   在java中,数组也是一种引用类型,即是一种类. ...

  7. java参数注解pam_吃透Java基础十:注解

    一.什么是注解 官方定义: 注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分.注解对于代码的运行效果没有直接影响. 注解有许多用处,主要如下: 提供信息给编译器: ...

  8. java基础总结二--让大学生活不再迷茫

    承接我的上一篇博客java基础总结1 https://blog.csdn.net/weixin_43410352/article/details/87073372 10.java的三大特性 封装:这是 ...

  9. Java基础系列二:Java泛型

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...

  10. Java基础知识(二) 面向对象的技术

    Java基础知识 面向对象的技术 1. 面向对象与面向过程有什么区别 2. 面向对象有哪些特征 3. 什么是继承 4. 组合和继承的区别 5. 多态的实现机制 6. 重载和覆盖有什么区别 7. 抽象类 ...

最新文章

  1. oracle函数,oracle编写函数
  2. JavaScript TreeView
  3. C语言 实现一个函数判断year是不是润年
  4. Redis java使用
  5. python增加工作日列_将工作日添加到日期字段
  6. JSON.stringify的三个参数(转载)
  7. WINX新增(1): KMP字符串查找算法
  8. 如何使用BootStrapDialog实现数据的添加与删除?
  9. luvcview-0.2.4移植
  10. C语言中callback回调函数,C++回调函数(callback)的使用
  11. nvme linux读写测试工具,不同硬件平台(intel/AMD)和不同OS/FS/测试工具下NVMe SSD性能简测...
  12. Filter过滤器实现登录权限拦截
  13. 论文解读:FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradig
  14. 超人气网站集合,快来pick你中意的吧!
  15. struct结构体里能放函数吗?
  16. RBP系统管理之系统用户管理
  17. 使用python讲二进制转换为音频文件_Python使用ffmpy将amr格式的音频转化为mp3格式的例子...
  18. 火焰特性识别的Matlab实现方法
  19. OSTA-LINUX3-选择题练习题整理
  20. hilink互联技术_hilink是什么意思

热门文章

  1. 入门c语言(四)顺序结构程序设计
  2. js判断是不是手机端访问网页,兼容iphone版本的UC浏览器
  3. php 逆序数组不使用reverse,PHP多维数组排序array_reverse不起作用?
  4. 大智慧2逐笔数据提取工具
  5. 如何充实地度过大学四年?
  6. 鹏业安装算量软件2021渠道大会暨授牌仪式成功举办
  7. 2011百度实习生招聘笔试试题---软件测试—测试方向(BJ)
  8. 顺丰慢吗,了解这些问题你就能得到答案
  9. Bootstrap知识点
  10. 用Python分析韩国女团喜欢什么单词