Oop 当一个对象不在工厂设计中时,生成另一个对象是否干净?

Oop 当一个对象不在工厂设计中时,生成另一个对象是否干净?,oop,coupling,Oop,Coupling,假设您有一个类ZipFile和一个类内容。 ZipFile有一个load()方法,用于读取zip存档中所有文件的内容并将其放入内容对象中。 什么是最合适的OOP设计 1)ZipFile.load()将创建一个内容对象 class ZipFile { public function load() { // Load all files in zip // ... Content content = new Content();

假设您有一个类ZipFile和一个类内容。
ZipFile有一个load()方法,用于读取zip存档中所有文件的内容并将其放入内容对象中。
什么是最合适的OOP设计

1)ZipFile.load()将创建一个内容对象

class ZipFile
{
    public function load()
    {
        // Load all files in zip
        // ...
        Content content = new Content();
        content->set(data);
        return( content );
    }
}
ZipFile zf = new ZipFile();
Content ct = zf->load();
ct->print();
B)给ZipFile构造函数一个要填充的内容对象

class ZipFile
{
    private Content content;

    public function ZipFile(content) // constructor
    {
        this->content = content;
    }    
    public function load()
    {
        // Load all files in zip 
        // ...
        this->content->set(data);
    }
}
Content ct = new Content();
ZipFile zf = new ZipFile(ct);
zf->load();
ct->print();
基本上,分离对象(松耦合)更好吗? 作为一个老派的程序程序员,我不能停止质疑OOP的几种设计方法。我在“OOP的最佳方式是什么?有什么建议可以考虑吗?书?网站?”


感谢您的帮助

这两种情况的概括是不同的:

第一种情况概括为
ZipFile
了解其内容的具体类,并返回接口的一些实现

第二种情况概括为
ZipFile
知道其内容的接口,并接收一个具体的类(稍后初始化??)

换句话说,第一种情况耦合了
ZipFile
和具体内容类。第二种情况耦合了
ZipFile
的客户机和具体内容类


考虑到
ZipFile
的内容很可能有一个特定的具体类,第一个泛化可能更自然。

为什么不将
Content
对象指定给
load
函数,而不是构造函数呢?这将与第一个示例更加等效nt可能被视为ZipFile的一部分,因为每个ZipFile都有一个内容,所以我把它交给构造函数。但我的问题更多的是关于每个解决方案的优缺点。