编程语言
首页 > 编程语言> > c#-工厂模式和我的无能.帮我看看光

c#-工厂模式和我的无能.帮我看看光

作者:互联网

让我们保持简单…

class Client  
abstract class AbstractBusinessObject  
class BusinessObject  
class BusinessObjectFactory  

>好的,因此您的客户需要在AbstractBusinessObject上执行一些操作.显然,需要在某个位置创建一个BusinessObject实例.为什么不在客户中?有什么害处?
>假设您说服我在BusinessObjectFactory中创建新的BusinessObjects.大.现在工厂必须做繁重的工作.假设我的工厂有一个Create(DataRow row)方法,因为我的BusinessObject需要DataRow从中提取有用的信息.
我的BusinessObject的属性为{get;私人套装;}.因此,我无法在工厂中分配任何属性值.可能我还是不应该.
但是,这意味着我必须完全传递DataRow.因此,基本上工厂只是传递我的参数.这家工厂有什么用?
>好的,所以我可能有不同的BusinessObject实现-每个都有不同的构造函数.我想工厂知道如何构造任何特定的BusinessObject才有意义.但是同样,我需要一个特定的工厂来获得特定的BusinessObject.至少我看到的所有例子都表明了这一点. ConcreteFactoryB创建ConcreteProductB(ConcreteFactoryA创建ConcreteProductA)客户如何知道如何构造工厂?甚至创建哪一个?
>啊,工厂注入了…成分根.对.但是我也可以直接注入BusinessObject.
>我认为DoFactory以上的示例更加清楚了.是否要确保狮子不吃野牛?狼不以牛羚为食吗?如果仅此而已,工厂将努力确保我只想创建一个对象就不需要一个,对吗?

那么像this one here这样的工厂有意义吗?如果我只有一个仅创建一种类型的类的Create()方法,那么工厂是否有意义?

真的,我读了很多.
每个示例看起来都一样.我错过了要点:(谁能提供一个清晰的现实世界示例?

https://stackoverflow.com/a/2280289/1407618
去过也做过…

解决方法:

您是使用AbstractComputer的人.只要计算机具有AbstractComputer拥有的所有基本知识,您就不必关心计算机的构造.现在,为了使用计算机,您是自己创建()还是从ComputerStore或ComputerProvider获得?这些将为您提供最适合您需求的计算机(即您的预算,技能,屏幕尺寸).他们从知道如何最佳创建它们的ComputerFactory处获得了AbstractComputer.

至于AbstractComputer的属性,有些可以交换存储,而有些则不能.这确实取决于您的上下文.但是,要使工厂将它们放入计算机中,如果它们在构造后不可交换,则需要一个入口点(构造函数).

重要的一点是,知道如何根据片段来构造自己不是AbstractComputer的责任.消费者也不负责知道它需要哪一台计算机(如果他们有足够的知识并且他们的需求永远不会改变,他们有时可以).

标签:factory,factory-pattern,c,design-patterns
来源: https://codeday.me/bug/20191028/1954358.html