工厂设计模式的实现
Implementation of the Factory Design Pattern
我正在为我的客户开发一个小应用程序,我试图在那里应用工厂方法设计模式。我不确定我是否做对了。
基本上我有一个抽象的 class 方案,它由具体方案(AccountScheme、ContactScheme、OrderScheme 等)扩展。每个class主要由实例变量和负责将Scheme转换为实际系统对象的方法组成(AccountScheme最终将用于创建Account,ContactScheme用于创建Contact等)。
我还有 SchemeFactory class,它有一个带有两个参数的静态方法 createScheme - Scheme 应该能够转换成的系统对象类型和 JSON 将被解析为 Scheme 的字符串对象本身。
最后还有一个 ApiService class,它处理 Rest 请求并使用 SchemeFactory 创建方案(使用请求主体)。之后会处理方案,如果需要,会在特定时间点创建(使用方案)特定系统对象并将其插入数据库。
我相信 UML 图(这是我的第一个)看起来像这样:
UML Diagram
概念正确。
您的 UML 未显示摘要 class。在你的情况下,你可以有这样的东西(如你的 UML 中所述):
class SchemaFactory
{
public static Schema getSchema(String type, String json)
{
if ( type.equals("account") )
return new AccountSchema(json);
else if ( type.equals("contact") )
return new ContactSchema(json);
else if ( type.equals("order") )
return new OrderSchema(json);
throw new IllegalArgumentException();
}
}
界面:
interface Schema {
}
AccountSchema 的实现:
class AccountSchema implements Schema {
AccountSchema(String json) {
//use json
}
}
摘要 class 对于模式是可选的。如果您想强制 Schemas 使用 json 作为参数填充抽象 class 的构造函数,这很有用,但是模式 class 仍然可以伪造,例如:
public class FakeSchema extends AbstractSchema {
public FakeSchema () {
super(null);
}
}
我正在为我的客户开发一个小应用程序,我试图在那里应用工厂方法设计模式。我不确定我是否做对了。
基本上我有一个抽象的 class 方案,它由具体方案(AccountScheme、ContactScheme、OrderScheme 等)扩展。每个class主要由实例变量和负责将Scheme转换为实际系统对象的方法组成(AccountScheme最终将用于创建Account,ContactScheme用于创建Contact等)。
我还有 SchemeFactory class,它有一个带有两个参数的静态方法 createScheme - Scheme 应该能够转换成的系统对象类型和 JSON 将被解析为 Scheme 的字符串对象本身。
最后还有一个 ApiService class,它处理 Rest 请求并使用 SchemeFactory 创建方案(使用请求主体)。之后会处理方案,如果需要,会在特定时间点创建(使用方案)特定系统对象并将其插入数据库。
我相信 UML 图(这是我的第一个)看起来像这样: UML Diagram
概念正确。
您的 UML 未显示摘要 class。在你的情况下,你可以有这样的东西(如你的 UML 中所述):
class SchemaFactory
{
public static Schema getSchema(String type, String json)
{
if ( type.equals("account") )
return new AccountSchema(json);
else if ( type.equals("contact") )
return new ContactSchema(json);
else if ( type.equals("order") )
return new OrderSchema(json);
throw new IllegalArgumentException();
}
}
界面:
interface Schema {
}
AccountSchema 的实现:
class AccountSchema implements Schema {
AccountSchema(String json) {
//use json
}
}
摘要 class 对于模式是可选的。如果您想强制 Schemas 使用 json 作为参数填充抽象 class 的构造函数,这很有用,但是模式 class 仍然可以伪造,例如:
public class FakeSchema extends AbstractSchema {
public FakeSchema () {
super(null);
}
}