c#工厂模式帮助 [英] c# factory pattern help

查看:95
本文介绍了c#工厂模式帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试构建一个类库项目。

项目的结构必须类似于:



Class_Library解决方案:

对象(文件夹):

| _ Obj(班级)



班级(文件夹):

| _ ClassA(类)

| ___ MethodA (创建对象类型为Objects.Obj,

用数据A填充它并返回它)


| _ ClassB(类)

| ___ MethodB (创建Objects.Obj类型的对象,

用数据B填充它并返回它)


| _ ClassC(class)

| ___ MethodC (创建Objects.Obj类型的对象,

用数据C填充它并返回它)


| _ ClassD(class)

| ___ MethodD (创建Objects.Obj类型的对象,

用数据D填充它并返回它)




静态FactoryF (公共课。这不在Classes目录下。

| 它与Objects&类文件夹。)

| ___ MethodCreateClassObj (创建objA,objB,objC或objD类型的对象

of分别为A,B,C,D类)基于参数

传递给它并返回它。返回的对象然后

可用于调用方法A,B,C或D.)




只有FactoryF应该能够从A,B,C和D类创建对象。

即,在另一个项目中使用这个dll时,应该不能直接创建A,B,C类对象, D,相反,必须经常通过FactoryF。



FactoryF应该返回任何一个对象,即。 objA,objB,objC或objD(分别为A,B,C,D类)。



现在,我想要的是,请参考这个dll在另一个项目中,比如projP。

我用参数调用dll.FactoryF.MethodCreateClassObj(),并根据参数返回一个对象。说它返回objA。

然后,我使用objA.MethodA()来获取Object.Obj的填充副本。

但是,我不应该直接创建来自projP的对象如下:

Objects.Obj o = new Objects.Obj();

ClassA a = new ClassA(); a.MethodA();



我的问题是ClassA,ClassB ...以及Objects.Obj和MethodA,MethodB的访问修饰符设置。 ..



当我将Objects.Obj,A,B,C,D类和方法A,B,C,D设置为私有,受保护或内部时,

然后我不能调用方法A,B,C,D,即使我可以调用FactoryF并且它成功返回A / B / C / D类的对象。



将它们设置为public将允许直接创建这些对象...

解决方案

你应该编写一个接口 - 看看这个文章设计模式第2部分 - 工厂模式 [ ^ ]

I am trying to build a class library project.
The structure of the project has to be something like:

Class_Library solution:
Objects(folder):
|_ Obj (class)

Classes(folder):
|_ ClassA (class)
|___ MethodA (creates object of type Objects.Obj,
populates it with data A and returns it )

|_ ClassB (class)
|___ MethodB (creates object of type Objects.Obj,
populates it with data B and returns it )

|_ ClassC (class)
|___ MethodC (creates object of type Objects.Obj,
populates it with data C and returns it )

|_ ClassD (class)
|___ MethodD (creates object of type Objects.Obj,
populates it with data D and returns it )


static FactoryF (public class. This is not under Classes directory.
| It lies at the same level as Objects & Classes folders.)
|___ MethodCreateClassObj (creates object of type objA, objB, objC or objD
of classes A, B, C, D respectively) based on parameter
passed to it and returns it. The returned object then
can be used to call Methods A, B, C or D.)


Only FactoryF should be able to create objects from classes A, B, C and D.
ie, when using this dll in another project, one should not be able to directly create objects of Class A,B,C,D, rather, one must always go through FactoryF.

FactoryF should return any ONE object ie. objA, objB, objC or objD (of classes A, B, C, D respectively) at a time.

Now, what I would like is, refer this dll in another project, say projP.
I call dll.FactoryF.MethodCreateClassObj() with an argument, and it returns one object based on the argument. say it returns objA.
then, I use objA.MethodA() to get a populated copy of Object.Obj.
But, I SHOULD NOT BE ABLE to directly create objects from projP like below:
Objects.Obj o = new Objects.Obj();
ClassA a = new ClassA(); a.MethodA();

My problem is the access modifier settings for the ClassA, ClassB... as well as for Objects.Obj and for MethodA, MethodB...

When I set Objects.Obj, Class A, B, C, D and Methods A, B, C, D to private, protected or internal,
then I cannot call Methods A, B, C, D even though I can call FactoryF and it returns an object of Class A/B/C/D successfully.

setting them public would allow direct creation of these objects...

解决方案

You should be coding to an Interface - have a look at this article Design Patterns Part 2 - The Factory Pattern[^]


这篇关于c#工厂模式帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆