ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-28 18:17:14  阅读:212  来源: 互联网

标签:factory factory-pattern c design-patterns


让我们保持简单…

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有