Java 具有继承类的抽象工厂模式

Java 具有继承类的抽象工厂模式,java,inheritance,abstract-factory,Java,Inheritance,Abstract Factory,我想实现抽象工厂模式。 我有三节课 超类(SC) 子类(childA,应从sc继承) 子类(childB,也应从sc继承) 到目前为止,我所做的是为超类实现抽象工厂设计模式。我还没有继承遗产。我不知道如何用这两个子类实现该模式。我需要补充什么 抽象工厂 水泥厂 摘要 SC 本文介绍了一种创建带有继承的抽象工厂的非常详细的方法: 如果你的SC超类也是抽象的,你可以很容易地做到: public abstract class AbstractFactory { public abstract

我想实现抽象工厂模式。 我有三节课

  • 超类(SC)
  • 子类(childA,应从sc继承)
  • 子类(childB,也应从sc继承)
  • 到目前为止,我所做的是为超类实现抽象工厂设计模式。我还没有继承遗产。我不知道如何用这两个子类实现该模式。我需要补充什么

    抽象工厂

    水泥厂

    摘要

    SC


    本文介绍了一种创建带有继承的抽象工厂的非常详细的方法:

    如果你的SC超类也是抽象的,你可以很容易地做到:

    public abstract class AbstractFactory {
        public abstract SC sc();
    }
    
    public class ChildAFactory extends AbstractFactory {
        public SC sc(){ return new ChildA();}
    }
    
    public class ChildBFactory extends AbstractFactory {
        public SC sc(){ return new ChildB();}
    }
    
    如上述文章所述:

    class FactoryMaker{
      private static AbstractFactory pf=null;
      static AbstractFactory getFactory(String choice){
        if(choice.equals("a")){
            pf=new ChildAFactory();
        }else if(choice.equals("b")){
            pf=new ChildBFactory();
        } return pf;
      }
     }
    
    // Client
    public class Client{
      public static void main(String args[]){
        AbstractFactory pf= FactoryMaker.getFactory("a");
        SC sc = pf.sc(); // ChildA is initialized
       }
    }
    
    有几种方法可以使用抽象工厂,这取决于您的需求。这是一种非常简单的方法,可能会随着您的需求而改变。例如,上面的解决方案只是试图隐藏具体的实现。客户只知道SC


    HTH,Sabine

    您需要分别为ChildA和ChildB实施两个工厂,例如:

    public class ChildAFactory extends AbstractFactory {
    
        @Override
        public SC createNewSC() {
            return new ChildA();
        }
    }
    
    public class ChildBFactory extends AbstractFactory {
    
        @Override
        public SC createNewSC() {
            return new ChildB();
        }
    }
    
    public class SC extends AbstractSC{
    
        @Override
        public void doStuff() {
            System.out.println("Hello World");
        }
    
    }
    
    public abstract class AbstractFactory {
        public abstract SC sc();
    }
    
    public class ChildAFactory extends AbstractFactory {
        public SC sc(){ return new ChildA();}
    }
    
    public class ChildBFactory extends AbstractFactory {
        public SC sc(){ return new ChildB();}
    }
    
    class FactoryMaker{
      private static AbstractFactory pf=null;
      static AbstractFactory getFactory(String choice){
        if(choice.equals("a")){
            pf=new ChildAFactory();
        }else if(choice.equals("b")){
            pf=new ChildBFactory();
        } return pf;
      }
     }
    
    // Client
    public class Client{
      public static void main(String args[]){
        AbstractFactory pf= FactoryMaker.getFactory("a");
        SC sc = pf.sc(); // ChildA is initialized
       }
    }
    
    public class ChildAFactory extends AbstractFactory {
    
        @Override
        public SC createNewSC() {
            return new ChildA();
        }
    }
    
    public class ChildBFactory extends AbstractFactory {
    
        @Override
        public SC createNewSC() {
            return new ChildB();
        }
    }