JAVA设计模式 之 工厂模式

首先声明一下工厂模式的原理和用于何种情况。

意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

何时使用:我们明确地计划不同条件下创建不同的实例时。

如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

下面让我们来看一下如何创建简单的工厂模式吧

首先创建一个公式的接口。

public interface DesignFormulas {
    //获取买卖信号的信息,用map集合接收
    public Map<String, List<StockDataVo>> getBuySellSignal();
}

在来创建这个公式的实现类

这是指标EMA

public class EMA implements DesignFormulas {

    public Map<String, List<StockDataVo>> getBuySellSignal() {
        System.out.println("这里是EMA方法");
        return null;
    }

}

这是指标SMA

public class SMA implements DesignFormulas {

    public Map<String, List<StockDataVo>> getBuySellSignal() {
        System.out.println("这里是SMA方法");
        return null;
    }

}

然后在来创建一个工厂  代码如下

   public <T> T getForsignal(Class<?extends T> clazz){

   //<T> 表明了 这是一个T 类型的方法。  //T表明了  返回T类型   

​​​​​  //(Class)定义了参数类型为任何Class   // (Class<?extends T>)设置了 参数类型必须和这个T有继承关系    
        T obj=null;
        try {
       //obj=Class.forName(clazz.getName()).newInstance();  //用这个方法也可以  但是后面调用的时候需要强制转换    //意思是根据Class的名字来创建的一个对象  类似于New方法  

            obj=clazz.getDeclaredConstructor().newInstance();    //与上面同理
        } catch (ReflectiveOperationException e) {
            e.printStackTrace();  
        }
        return obj;    
    }

现在写一个min方法来调用这些

public class Controlle {
    
    public static void main(String[] args) {
     //Administrator administrator= new Administrator();
     //EMA ema=(EMA)administrator.getForsignal(EMA.class);
     //ema.getBuySellSignal();
      //如果使用上面工厂类的被注释掉的那一种方法   就是这样实现 只是要转型罢了;




        Administrator administrator= new Administrator();
        EMA ema=administrator.getForsignal(EMA.class);
        ema.getBuySellSignal();
        SMA sma=administrator.getForsignal(SMA.class);
        sma.getBuySellSignal();
    }
    
}

这是鄙人第一次在CSDN上发表博客,由于个人水平有限 可能代码非常辣眼睛,也会有些不明所以的注释,还望各位大神见谅,

后面我会逐一撰写其他设计模式,也希望看到这篇博客的人 多多提出意见,以便我后期改进,感激不尽!大笑

猜你喜欢

转载自blog.csdn.net/qq_32495973/article/details/81042523