Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)

两个类都需要使用对方特性,但其间只有一个单向连接

 重构:添加一个反向指针,并使修改函数能够同时更新两条连接

由哪个类负责控制关联关系。建议单个类来操控,因为这样就可以将所有处理关联关系的逻辑安置于一地。

    1、如果两者都是引用对象,而期间的关联是“一对多”关系,那么就由“拥有单一引用”的那一方承担“控制者”角色。
    2、如果某个对象是组成另一个对象的部件,那么由后者(整体)负责控制关联关系。
    3、如果两者都是引用对象,而期间的关联是“多对多”关系,那么随便哪个对象控制关联关系都可。

public class Order {private Customer customer;public Customer getCustomer() {return customer;}// 建议:一对多关系里,【一方】维护关系.public void setCustomer(Customer arg) {if (this.customer != null) {this.customer.friendOrders().remove(this);}this.customer = arg;if (this.customer != null) {this.customer.friendOrders().add(this);}}
}public class Customer {private Set<Order> orders = new HashSet<>();public Set<Order> friendOrders() {/*should only be used by Order when modifying the association*/return orders;}// 【多方】也修改连接,直接调用【一方】的函数.public void addOrder(Order arg) {arg.setCustomer(this);}
}

多对多场景:

public class Order {private Set<Customer> customers;// controlling methods.public void addCustomer(Customer arg) {arg.friendOrders().add(this);this.customers.add(arg);}public void removeCustomer(Customer arg) {arg.friendOrders().remove(this);this.customers.remove(arg);}
}public class Customer {private Set<Order> orders = new HashSet<>();public Set<Order> friendOrders() {/*should only be used by Order when modifying the association*/return orders;}// 使用控制方函数.public void addOrder(Order arg) {arg.addCustomer(this);}public void removOrder(Order arg) {arg.removeCustomer(this);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的作品-图书馆信息管理系统

这曾经是我的数据库课程设计中开发的程序&#xff0c;而且“有幸”当上了我以前高中同学的毕业设计。下面公布几张图片待我的那位同学毕设通过后我就公开源代码&#xff01;哈哈 转载于:https://www.cnblogs.com/wpwen/archive/2006/05/14/399914.html

计算机不能显示可移动磁盘咋办,U盘插上电脑不显示“可移动磁盘”该怎么办...

U盘插上电脑不显示“可移动磁盘”该怎么办重新分配盘符1、右击我的电脑&#xff0c;在弹出的快捷菜单中选择治理命令&#xff0c;进入到计算机治理窗口。2、依次展开存储/可移动存储&#xff0c;单击磁盘治理一项&#xff0c;在窗口右侧&#xff0c;看到U盘运行状态为良好&…

漂亮图片演示ajax制作教程-lightbox

漂亮图片演示ajax制作教程&#xff0d;lightbox 这种效果就像你关闭计算机时所得到的那种效果。在不刷新页面的情况下实现大图片浏览。过渡完美。大家可以看看效果&#xff1a;http://www.evaxp.com/pic/这个演示我是用golive做得。手动添加。错乱排列。主要就是添加这么一段代…

Encapsulate Collection(封装集合)

函数直接返回了一个集合 public class Person {private Set<Course> courses;public Set<Course> getCourses() {return courses;}public void setCourses(final Set<Course> courses) {this.courses courses;} } 重构&#xff1a;让这个函数返回该集合的…

CNNIC报告:我国网民达7.72亿 人工智能取得重要进展

来源&#xff1a;网络大数据概要&#xff1a;报告显示&#xff0c;截至2017年12月&#xff0c;我国网民规模达7.72亿&#xff0c;全年共计新增网民4074万人。互联网普及率为55.8%&#xff0c;较2016年底提升2.6个百分点。中国互联网络信息中心(CNNIC)今日发布第41次《中国互联网…

sakura计算机谱子,【14.08.13自拟】SAKURA急求生物股长的简谱

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼生物股长 - Sakura夏游云 记谱1bA356 [3][2] [3][2] [1]7[1] 7[1] 753356 [3][2] [3][2] [1]7[1][2] 5 [5][2][3]356 [3][2] [3][2] [1]7[1] 7[1] 75367[1] 675356 67[1] 67 [5][3]间奏56[3][2][1] 7 5 3 2 1 【[5] [3]】56[3][2][…

Javascript里使用Dom操作Xml

一&#xff0e;本笔记使用的Xml文件 二&#xff0e;IXMLDOMDocument/DOMDocument简介 2&#xff0e;1 属性 2&#xff0e;1&#xff0e;1 parseError 2&#xff0e;1&#xff0e;2 async. 2&#xff0e;1&#xff0e;3 xml 2&#xff0e;1&#xff0e;4 text 3 2&am…

Replace Type Code with Class(以类取代类型码)

类之中有一个数值类型码&#xff0c;但它不影响类的行为 public class Person {public static final int O 0;public static final int A 1;public static final int B 2;public static final int AB 3;private int bloodGroup;public void setBloodGroup(int arg) {this.…

AI 识别抑郁症正确率高达八成,但AI+精神健康还有很长的路要走

来源&#xff1a; 智能相对论&#xff08;aixdlun&#xff09;近年来&#xff0c;“抑郁症”一词越来越多的被人们提起&#xff0c;不少名人如白岩松、崔永元等都曾表示陷入过抑郁症的痛苦&#xff0c;而抑郁症患者不堪病痛而自杀的新闻也屡见不鲜。生命的“陨落“&#xff0c;…

关于服务器虚化的优势,vmware虚化优势.docx

vmware虚化优势VMWARE服务器虚拟化介绍利用虚拟化基础架构技术&#xff0c;可以不断整合工作负载&#xff0c;从而充分利用服务器并降低运营成本。该基础架构技术不但使系统管理员能够管理更多的服务器&#xff0c;而且在置备新的软件服务和维护现有软件服务时&#xff0c;具有…

在程序中生成PDF

这几天一直在关注这方面的事情:在Delphi中将扫描&#xff0c;排版&#xff0c;生成pdf文档 并压缩入库&#xff0c;提取文本进行全文检索等一系列对文本的控制扫描部分&#xff1a;使用delphi TWain组件可以方便的得到Image再通过奥威目前的文本控制技术在RichView里生成相关文…

上万家物联网公司会被“政策死”吗

来源&#xff1a;财经十一人概要&#xff1a;有时候&#xff0c;打败你的可能不是新技术&#xff0c;只是一份文件。这次政策风波涉及两个问题&#xff0c;一是哪种物联网技术路线更合适&#xff0c;二是通过行政手段干预市场竞争是否合理。“有时候&#xff0c;打败你的可能不…

Replace Type Code with Subclasses(以子类取代类型码)

有一个不可变的类型码&#xff0c;它会影响类的行为 public class Employee {static final int ENGINNER 0;static final int SALESMAN 1;static final int MANAGER 2;private int type;public Employee(int type) {this.type type;}public int getType() {return type;} …

.net 中使用socket (c#)

前几天在网上看到关于使用socket 编写聊天程序的一个例子&#xff0c;学习了一下&#xff0c;网上的例子是VB.NET的&#xff0c;自己改写成了C#的 大同小异&#xff0c;只作为记录 &#xff1a; 发送端usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.Co…

Replace Type Code with State/Strategy(以State/Strategy取代类型码)

有一个类型码&#xff0c;它会影响类的行为&#xff0c;但你无法通过继承消除它 public class Employee {static final int ENGINNER 0;static final int SALESMAN 1;static final int MANAGER 2;private int type;// 月薪.private int montylySalary;// 佣金.private int c…

MSRA副院长周明博士:四大研究领域揭示自然语言技术的奥秘

来源&#xff1a;AI科技评论概要&#xff1a;自然语言理解处在认知智能最核心的地位。比尔盖茨曾说过&#xff0c;「语言理解是人工智能皇冠上的明珠」&#xff0c;沈向洋博士也说过「懂语言者得天下」。自然语言理解处在认知智能最核心的地位。它的进步会引导知识图谱的进步&a…

net中的调试javascript脚本

怎样对.net中的javascript脚本进行调试&#xff1f;第一步&#xff1a;在IE的“Internet设置”中选择“高级”——“安全”——“启用集成windows身份验证”(这一步很重要!!!)第二步&#xff1a;同样在“Internet设置”中把“禁止脚本调试”的勾去掉第三步&#xff1a;用调试模…

ajax将响应结果显示到iframe,JavaScript:iframe / Ajax / JSON

iframe在Ajax流行之前大量使用&#xff1a;iframe中的src属性指定的就是一个独立的页面url地址&#xff0c;iframe中呈现的就是这个页面的内容。通过改变src的值&#xff0c;我们就可以轻松的改变iframe中的内容(类似的&#xff0c;刷新验证码也是同样的手段)&#xff1a;docum…

Decompose Conditional(分解条件表达式)

有一个复杂的 if-else 语句 if (date.before(SUMMER_START) || date.after(SUMMER_END)) {charge quantity * winterRate winterServiceCharge; } else {charge quantity * summerRate; } 重构&#xff1a; 从if-else 中分别提炼出独立函数 if (notSummer(date)) {charge…

2018 AI 产品趋势:喧嚣的追风者和静默的收割人

来源&#xff1a;36氪毫无疑问&#xff0c;在消费科技品领域&#xff0c;AI产品有泡沫。故事要从2014年说起。那一年底&#xff0c;亚马逊低调发布了智能音箱Echo&#xff0c;苹果发布了第一代Apple Watch智能手表。比起AI浪潮&#xff0c;那个时候大家谈论更多&#xff0c;是智…