在不在工厂设计中时,对象是否清洁以生成另一个对象?

时间:2010-12-17 18:12:18

标签: oop coupling

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

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

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构造函数提供一个Content对象来填充

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这个的最佳方式。有什么建议可以考虑吗?预订?网站?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

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

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

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

换句话说,第一种情况是ZipFile和任何具体的内容类。第二个将ZipFile的客户与具体内容类联系起来。

鉴于ZipFile很可能与其内容的特定具体类相关,第一个概括可能是更自然的。