Oop 设计-建造或工厂模式
我理解这两种模式(我想),但鉴于我的特殊需要,我似乎既找不到解决方案,也找不到示例(所有示例都非常简单) 我的问题是,我需要某种工厂(或director/etc)来创建可能有依赖关系也可能没有依赖关系的对象 假设我有以下代码:(我使用的是C#) 我真的不知道如何实现这一点:Oop 设计-建造或工厂模式,oop,design-patterns,factory,builder,Oop,Design Patterns,Factory,Builder,我理解这两种模式(我想),但鉴于我的特殊需要,我似乎既找不到解决方案,也找不到示例(所有示例都非常简单) 我的问题是,我需要某种工厂(或director/etc)来创建可能有依赖关系也可能没有依赖关系的对象 假设我有以下代码:(我使用的是C#) 我真的不知道如何实现这一点:myobj.setParent(这个)。它不能在构造函数中(如ObjectB),因为父对象在每种情况下都不相同。 这就是我为我的工厂所做的: class MyObjectFactory{ Content content
myobj.setParent(这个)代码>。它不能在构造函数中(如ObjectB),因为父对象在每种情况下都不相同。
这就是我为我的工厂所做的:
class MyObjectFactory{
Content content;
public MyObjectFactory(Content content){
this.content = content;
}
public MyObject create(objectInfo){ //suppose objectInfo is xml
//read xml
Type type = objectInfo.type;
//I'm totally fine with this. (Noob implementation)
switch(type){
case Type.A:
return new ObjectA();
break;
case Type.B:
//I'm also fine with this, unless there is a better way.
return new ObjectB(this.content);
break;
case Type.C:
return new ObjectC();
break;
}
}
}
到目前为止,ObjectA和ObjectB都很好。ObjectA很简单。ObjectB构造函数由工厂设置(工厂以前被赋予content
变量)
这就剩下ObjectC了,它需要父对象来删除它自己(这可能不是最好的例子。尝试模拟不同的需求)我如何做到这一点?
我只想到了一个解决方案:向MyObject接口添加一个方法,ObjectA和ObjectB将只有一个不做任何事情的setParent方法
我希望这不会令人困惑
编辑
我忘了在中添加父项:
类映射:父项
我想您将行为与对象创建混为一谈。Factory Method和Builder都是创造性的设计模式。因此,您可以使用其中一个来创建对象。请记住,这些模式只会解决对象创建问题
其他行为方面(如您所提到的,您希望实现特定的行为)不是这些设计模式的一部分。因此,您可以灵活地按照自己的方式进行操作,但请记住这些设计原则,如OCP、SRP、DIP等
这个问题讨论了这些模式:我认为您将行为与对象创建混为一谈。Factory Method和Builder都是创造性的设计模式。因此,您可以使用其中一个来创建对象。请记住,这些模式只会解决对象创建问题 其他行为方面(如您所提到的,您希望实现特定的行为)不是这些设计模式的一部分。因此,您可以灵活地按照自己的方式进行操作,但请记住这些设计原则,如OCP、SRP、DIP等
因此,这个问题涉及到这些模式:一个简单(如果不是优雅的话)的修复方法是将“this”传递给您的工厂,并仅在需要时让工厂调用setParent(),因为工厂知道实现细节
myobj = MyObjectFactory.create(map.objectInfo, this);
case Type.C:
var inst = new ObjectC();
inst.setParent(parent);
一个简单(如果不是优雅的话)的修复方法是将“this”传递给工厂,并且只有在需要时才让工厂调用setParent(),因为工厂知道实现细节
myobj = MyObjectFactory.create(map.objectInfo, this);
case Type.C:
var inst = new ObjectC();
inst.setParent(parent);
谢谢你让我意识到创造模式解决不了我想做的事。谢谢你让我意识到创造模式解决不了我想做的事。