Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 很多抽象类,我是否缺少一个设计模式?_Oop_Polymorphism_Abstract Class - Fatal编程技术网

Oop 很多抽象类,我是否缺少一个设计模式?

Oop 很多抽象类,我是否缺少一个设计模式?,oop,polymorphism,abstract-class,Oop,Polymorphism,Abstract Class,我有两个类:Transaction和testransaction,它们是从抽象类AbstractTransaction扩展而来的 因为这些对象的构造很复杂(有很多规则需要实现),所以我为每种类型都有一个构建器类。我还为处理持久性的两种类型的事务和“编写器”提供了存储库 因为Transaction和testransaction两者的行为略有不同(例如Transaction几乎是完全不可变的),所以我需要强制执行传递的类型。为此,我创建了临时类和非临时类继承自的抽象类,然后实现重写方法,为具体类键入

我有两个类:
Transaction
testransaction
,它们是从抽象类
AbstractTransaction
扩展而来的

因为这些对象的构造很复杂(有很多规则需要实现),所以我为每种类型都有一个构建器类。我还为处理持久性的两种类型的事务和“编写器”提供了存储库

因为
Transaction
testransaction
两者的行为略有不同(例如
Transaction
几乎是完全不可变的),所以我需要强制执行传递的类型。为此,我创建了临时类和非临时类继承自的抽象类,然后实现重写方法,为具体类键入hint,然后在抽象类中调用父方法

这意味着我最终得到了很多抽象类,如下所示:-

  • 抽象建设者
  • 摘要作者
  • 抽象存储库

我相信,随着我向这个模块添加功能,将会有更多功能。我觉得我可能缺少了一些设计模式来帮助处理这种多态性-在阅读OOP的基础知识时,我们总是被告知要寻找替代继承的方法来引入多态性…

考虑使用接口和抽象类-它们会遇到不同的(而且只是部分重叠)面向对象的设计标准。首先,当您真正想要共享实现时,请使用AbstractClass,当您只想公开函数的公共性时,请使用接口。是的,我尽可能使用接口,但这里的示例都共享了一些功能。例如,我在
TransactionWriter
和我正在使用的框架的DBAL之间有一个接口。因此,在另一个框架(或使用不同的DBAL)中使用该模块应该是相当直接的。