当前位置: 首页 > 知识库问答 >
问题:

工厂设计模式-在子类中定义方法

龚睿
2023-03-14

我正在实现一个工厂,一个负责跨应用程序管理令牌的类。我将在这个简化的示例之后解释我面临的问题:

public class TokenManagerFactory {

    public static TokenManager create(String tokenType)
    {
        if ("JWT".equals(tokenType))
            return new JwtTokenManagerImpl();

        return null;
    }


}
public abstract interface TokenManager {
    public  String       generateToken();
    public  boolean      verifyToken();
}

最后是实现jWTTokenManagerImpl:

public class JwtTokenManagerImpl implements TokenManager {
    //..Implementation of methods defined in interface (generateToken() and 
    //  verifyToken())

    public String aMethodNotDefinedInInterface() {
        return "A very cool String";
    }
}

现在,在我们的main中,我们要创建一个jWTTokenManager实例:

main {

    TokenManager tm = TokenManagerFactory.create("JWT");
    tm.aMethodNotDefinedInInterface(); // <-- Compilation error.

}

TokenManager类型未定义方法aMethodNotDefinedInInterface()

共有1个答案

柏高洁
2023-03-14

您是否可以更改TokenManagerFactory来接受接口?

public interface JwtTokenManager extends TokenManager {
    String aMethodNotDefinedInInterface();
}

public class TokenManagerFactory {

    public static <T extends TokenManager> T create(Class<T> managerInterface) {
        if (managerInterface == JwtTokenManager.class) {
            return (T) new JwtTokenManagerImpl();
        }

        return null;
    }
}

那么您使用工厂的位置可以是这样的:

public static void main(String[] args) {
    JwtTokenManager tm = TokenManagerFactory.create(JwtTokenManager.class);
    tm.aMethodNotDefinedInInterface();
}
 类似资料:
  • 工厂方法(Factory Method) Intent 定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。 Class Diagram 在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。 下图中,Factory 有一个 doSomething() 方法,这个方法需要用到一个产品对象,这个产品对象由 factoryMethod() 方法创建。

  • 工厂-创建对象而不向客户机公开实例化逻辑,并通过公共接口引用新创建的对象。是工厂方法的简化版本 工厂方法-定义一个创建对象的接口,但让子类决定实例化哪个类,并通过公共接口引用新创建的对象。 抽象工厂-提供了创建相关对象家族的接口,而无需显式指定它们的类。 null

  • 本文向大家介绍Ruby中使用设计模式中的简单工厂模式和工厂方法模式,包括了Ruby中使用设计模式中的简单工厂模式和工厂方法模式的使用技巧和注意事项,需要的朋友参考一下 之前有看过《ruby设计模式》,不过渐渐的都忘记了。现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下。 简单工厂模式: 这样写的好处是降低耦合。 比如增加一个开根号运算的时候,只需要在工厂类中添加一个分支

  • 本文向大家介绍Java设计模式编程中的工厂方法模式和抽象工厂模式,包括了Java设计模式编程中的工厂方法模式和抽象工厂模式的使用技巧和注意事项,需要的朋友参考一下 工厂方法模式 动机 创建一个对象往往需要复杂的过程,所以不适合包含在一个复合工厂中,当有新的产品时,需要修改这个复合的工厂,不利于扩展。 而且,有些对象的创建可以需要用到复合工厂访问不到的信息,所以,定义一个工厂接口,通过实现这个接口来

  • 本文向大家介绍PHP设计模式之工厂模式定义与用法详解,包括了PHP设计模式之工厂模式定义与用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP设计模式之工厂模式定义与用法。分享给大家供大家参考,具体如下: 工厂模式(Factory Design Pattern)作为一种创建型设计模式, 遵循了开放-封闭原则, 对修改封闭, 对扩展开放. 工厂方法(Factory Method)模

  • 本文向大家介绍Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】,包括了Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java设计模式之工厂模式。分享给大家供大家参考,具体如下: 一、 简单工厂 先来思考一个问题。我们平时写程序时,会有这种情况,A对象里面需要调用B对象的方法,这时我们使用的一般是new关键字来创建