日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/7/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

兩個(gè)類都需要使用對(duì)方特性,但其間只有一個(gè)單向連接

?重構(gòu):添加一個(gè)反向指針,并使修改函數(shù)能夠同時(shí)更新兩條連接

由哪個(gè)類負(fù)責(zé)控制關(guān)聯(lián)關(guān)系。建議單個(gè)類來(lái)操控,因?yàn)檫@樣就可以將所有處理關(guān)聯(lián)關(guān)系的邏輯安置于一地。

?? ?1、如果兩者都是引用對(duì)象,而期間的關(guān)聯(lián)是“一對(duì)多”關(guān)系,那么就由“擁有單一引用”的那一方承擔(dān)“控制者”角色。
?? ?2、如果某個(gè)對(duì)象是組成另一個(gè)對(duì)象的部件,那么由后者(整體)負(fù)責(zé)控制關(guān)聯(lián)關(guān)系。
?? ?3、如果兩者都是引用對(duì)象,而期間的關(guān)聯(lián)是“多對(duì)多”關(guān)系,那么隨便哪個(gè)對(duì)象控制關(guān)聯(lián)關(guān)系都可。

public class Order {private Customer customer;public Customer getCustomer() {return customer;}// 建議:一對(duì)多關(guān)系里,【一方】維護(hù)關(guān)系.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;}// 【多方】也修改連接,直接調(diào)用【一方】的函數(shù).public void addOrder(Order arg) {arg.setCustomer(this);} }

多對(duì)多場(chǎng)景:

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;}// 使用控制方函數(shù).public void addOrder(Order arg) {arg.addCustomer(this);}public void removOrder(Order arg) {arg.removeCustomer(this);} }

總結(jié)

以上是生活随笔為你收集整理的Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。