2 lwfhunter lwfhunter 于 2013.08.16 13:45 提问

两个互相引用的类,用工厂模式创建时,死循环的问题

假设有电脑、人 这么两个类,如图所示。
class person
{

computer myComputer;
}

class computer
{

person myOwner;
}

用工厂模式
如果我要创造小明这个人,那么我要用人的工厂去创造小明,在创造的时候我要set他有个HP电脑,
那么我又要用电脑工厂去创造HP电脑。但是创造HP电脑的时候我又要去用人的工厂创造小明这个人,这不就是循环下去了吗?
所以我纳闷了,1要么这样设计类是不正确的,2要么有其他办法解决这个问题
学习得不好,请大神解答

3个回答

todd_leftcode
todd_leftcode   2013.08.18 18:25
已采纳

小明应该不是抱着电脑出生的, 而HP电脑在生产时应该也没有打着小明的签。 所以构造时可能不必提供相应的参数。当然抽象可能不一定需要完全遵照现实。

其次,电脑一般情况下对于谁是自己的Owner可能不太关心,如果可以去除这种依赖最好,单向依赖比双向依赖简单, 简单就一定是好的。

lwfhunter
lwfhunter 谢谢回答,简单就是好,双向关联改为但相关联
4 年多之前 回复
falconfei
falconfei   2013.08.29 18:38

支持楼上,创建一个人的时候,不可能让他衣帽整齐,拿着名片出生吧,是生下来以后才有的其他东西。所以在工厂里创建人的时候,只要保证其有这个属性几个,并不一定赋值。

zhu_mingcheng
zhu_mingcheng   2013.08.18 21:42

这两个类的设计是有问题的,电脑这个类中可以不要拥有者,在创建人这个类的时候可以实例化一个电脑类,然后这个关联信息保存一个地方,查看电脑拥有者的时候去查以保存的就好了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java两个类相互持有引用的小问题
今天在写一个小程序中遇到一个问题,我想在两个类中相互持有引用,比如: 1. 一个类是画板,另一个类是画板中一个图形; 2. 画板必须持有图形的引用才能绘制图形; 3. 图形希望能够根据自身一些属性改变画板中其他的图形,所以需要持 有画板的引用来操作画板的资源。 于是就有如下代码: 画板: public class TankWar extends Frame { ...
两个类相互引用的解决方法
1 问题提出 最近在编写“斗地主”游戏,在程序中有一个“CDealer”类用来实现发牌等等功能,还有一个“CPoker”类,用来表示扑克牌。在CDealer类中包含了一个CPoker类指针的成员变量,而在CPoker类中也包含了一个CDealer类指针的成员变量,如下所示: //CPoker类头文件 #pragma once #include "Dealer.h" class CPo
C++中两个类互相引用的解决方法
一、问题描述 现在有两个类A和B需要定义,定义A的时候需要用到B,定义B的时候需要用到A。 二、分析 A和B的定义和调用都放在一个文件中肯定是不可以的,这样就会造成两个循环调用的死循环。 根本原因是:定义A的时候,A的里面有B,所以就需要去查看B的占空间大小,但是查看的时候又发现需要知道A的占空间大小,造成死循环。 解决方法1: (1)写两个头文件A.h和B.h分别用于声明类A和B;
第十一篇:OC中类的互引用问题及解决方法
1.类的头文件互引用: 》表现:在两个类A,B的声明中,A.h文件中导入了B.h,并且B.h文件中导入了A.h。    A.h文件中:                     #import                     #import "B.h"                    @interface A : NSObject    .........  @end
python 中的相互import问题
之前用C语言写作业的时候,偶尔会遇到文件相互引用导致不能编译的问题,那么Python中是否会遇到这种情况呢 # a.py import b name = 'a' print b.name # b.py import a name = 'b' print a.name 结果是AttributeError: 'module' object has no attribute 'name'
C++中两个类互相引用的解决
A的头文件A.h: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #ifndef _A #define _A #include "B.h" class A { private: int a; B objectb;//A的头文件导入了B的头文件,在调用B的
两个互相引用对象的垃圾回收
部分转自:《深入理解java虚拟机》一书。 判断对象是否存活 1、引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1。 当引用失效时,计数器值就减1。 任何时刻计数器为0的对象就是不可能再被使用的。 但是主流的java虚拟机没有采用引用计数算法,其中最主要的原因就是它很难解决对象之间互相循环引用的问题。 例子: 对象A和B互相引用,但除此之外,这两个对象
c++中两个类互相持有对方引用的方法
在java中,有时为了对象之间的通信,会让两个类互相持有对方引用 在刚学习c++的面向对象时,不能直接像java一样做,而是要有一些小技巧。
关于C++两个类相互引用的一点思考
昨天跟朋友讨论了一下在C++中如果出现两个类相互引用的情况,编译无法通过的问题如何解决: // A.h #ifndef A_H #define A_H #include "B.h" class A { B b; }; #endif A_H // B.h #ifndef B_H #define B_H #include "B.h" class B { A a
C++ 两个类头文件互相引用
好苦逼 今天被两个 类头文件 整的 欲哭无泪!     因为定义了两个类,这两个 类 如果互相引用到,然鹅。。我凌乱了,本以为是只要两个都类定义的头文件只要 互相    包括 include 就搞定了,就没想到 以为 如此简单 ,我弄了一下午,有一点点弄明白了!。    这里我跟大家分享一下把,也算自己记录一下!。     首先 咱先 来 个死循环压压惊。。一杯咖啡的时间。保证cp