php – 域对象工厂是什么样的?
发布时间:2020-12-13 22:05:09 所属栏目:PHP教程 来源:网络整理
导读:我有一个DataMapperFactory,我认为我正确地做了它,有一个但我有一个DomainObjectFactory也有意义,但它似乎毫无意义.就是这个: namespace libsfactories;use models as Models;class DomainObjectFactory { public function build($name) { $className = 'M
我有一个DataMapperFactory,我认为我正确地做了它,有一个但我有一个DomainObjectFactory也有意义,但它似乎毫无意义.就是这个:
namespace libsfactories; use models as Models; class DomainObjectFactory { public function build($name) { $className = 'Models' . $name; return new className(); } } 我能看到的唯一优势是我保持新运算符不会出现在我的代码中. DomainObjectFactory必须要比这更多吗? 任何帮助都会非常感谢. 解决方法
通常,您可以使用工厂从特定实现中抽象出来.如果您使用新的< classname>运算符,每次都实例化一个特定的类.如果要在以后将此类与其他实现交换,则必须手动更改每个新语句.
工厂模式允许您从特定类中抽象.有效的最小用例可能是这样的: interface UserInterface { public function getName(); } class UserImplementationA implements UserInterface { private $name; public function getName() { return $this->name; } } class UserImplementationB implements UserInterface { public function getName() { return "Fritz"; } } class UserFactory { public function createUser() { if (/* some condition */) return new UserImplementationA(); else return new UserImplementationB(); } } $f = new UserFactory(); $u = $f->createUser(); // At this point,you don't really have to care // whether $u is an UserImplementationA or // UserImplementationB,you can just treat it as // an instance of UserInterface. 当这变得非常有用时,一个用例(很多)是在进行单元测试时.在测试驱动开发中,您经常使用模拟对象(实现特定接口但实际上没有做任何事情的对象)替换类的依赖关系.使用工厂模式,使用模拟类透明地替换特定类很容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |