没有抽象类和接口的工厂方法



我是新手模式,并试图弄清楚。我阅读了几个关于 Factory 方法的教程并做到了:我有一个父类 A,其中包含几个带有 getter 和 setter 的字段。还有另外两个类 B 和 C(未来计划更多(继承自 A,并且还有几个带有 getter 和 setter 的字段。 此模式的所有教程通常都有一个抽象类或接口,由类 B 和 C 实现。但我使用通常的A类,在某些情况下应该用作B类和C类。在我的程序中有一些自动分类,我可以在运行时了解我需要哪个类。 这是工厂方法模式的实现吗?这段代码没有问题吗?

public class A {
private String x1 = "some value";
private String x2;
public String x1() {
return x1;
}
public void setX1(String x1) {
this.x1 = x1;
}
public String getX2() {
return x2;
}
public void setX2(String x2) {
this.x2 = x2;
}
}
public class B extends A {
private String x3;
private String x4;
public String getX3() {
return x3;
}
public void setX3(String x3) {
this.x3 = x3;
}
public String getX4() {
return x4;
}
public void setX4(String x4) {
this.x4 = x4;
}
}
public class C extends A {
private String x5;
private String x6;
public String getX5() {
return x5;
}
public void setX5(String x5) {
this.x5 = x5;
}
public String getX6() {
return x6;
}
public void setX6(String x6) {
this.x6 = x6;
}
}
public class MyClassFactory {
public static A getMyClass(String criteria)
{
switch (criteria){
case "class B":
return new B();
case "class C":
return new C();
default:
return new A();
}
}
}

乍一看,您的代码看起来像是工厂模式实现(wiki链接(。来自维基百科:

(软件(设计模式是常见问题的一般解决方案 在软件设计方面。它是有关如何解决 问题,可以在不同情况下使用。设计模式 通常显示类之间的关系和交互或 对象,而不指定最终应用程序类或对象 参与其中。模式标识并指定抽象 高于单个类和实例的级别。

话虽如此,恕我直言,模式没有正确或错误的实现。该模式用于指导、保证和保护工程师将做出的结构选择。然而,有时开发人员会感到不安,并试图将他们所做的一切都融入一种模式中,即使该模式不是解决他们问题的最佳解决方案,通常代码会变得混乱。

是的,这是一个工厂模式实现,因为您将对象创建的逻辑从客户端抽象出来,并将此责任委托给另一个方法,该方法根据某些常见条件选择要创建的类型。

代码的一个缺点是子类 B 和 C 添加了一些公共 getter 和 setter,这些 getter 和 setter 在创建后不会立即可见,因为返回的对象类型是 A(如果底层对象可能是 B 或 C(。您需要将创建的对象强制转换为 B 或 C。

例:

MyClassFactory.getMyClass("class B").getX3() // you can't call getX3() since this method belongs to B, but the object returned by the factory is typed as A

最新更新