4.工厂模式

1.工厂模式可以把对象的创建和使用分离出来,降低代码的耦合性。

(1)简单工厂模式

简单工厂可以实现对象的创建和对象的使用分离,由专门的工厂类负责对象的创建,缺点在于工厂类不够灵活,如果需要增加新的产品需要修改工厂类,而且产品较多时,工厂方法代码逻辑将会非常复杂。
package com.java.dp.factory;

/**
 * @Author lizhilong
 * @create 2019/12/2 17:27
 * @desc  生产线接口
 */
public interface BuildLine {

    void  build();
}
package com.java.dp.factory;

/**
 * @Author lizhilong
 * @create 2019/12/2 17:30
 * @desc 食品生产线
 */
public class FoodLine implements BuildLine {
    @Override
    public void build() {
        System.out.println("-----------生产食品--------------");
    }
}
package com.java.dp.factory;

/**
 * @Author lizhilong
 * @create 2019/12/2 17:28
 * @desc   服装生产线
 */
public class ClothesLine implements BuildLine {
    @Override
    public void build() {
        System.out.println("-----------生产衣服------------");
    }
}
package com.java.dp.factory;

/**
 * @Author lizhilong
 * @create 2019/12/2 17:32
 * @desc  对象工厂
 */
public class SimpleFactory {

    public static BuildLine getFactory(String name) {
        if ("food".equals(name)) {
            return new FoodLine();
        }
        if ("clothes".equals(name)) {
            return new ClothesLine();
        }
        return null;
    }
}
BuildLine foodLine = SimpleFactory.getFactory("food");
 foodFactory.build();

 BuildLine clothesLine = SimpleFactory.getFactory("clothes");
 clothesFactory.build();

 (2)工厂模式

工厂模式通过核心的工厂类来负责创建工厂,具体的产品由相应的工厂去实现,这样的做的好处是如果需要增加新的产品,只需要相应的工厂,创建新的核心工厂类即可,对原来的代码无需修改,只需要维护新代码即可。

实现是在简单工厂的基础上新增核心工厂接口和实现。

package com.java.dp.factory;

/**
 * @Author lizhilong
 * @create 2019/12/2 18:03
 * @desc   核心工厂接口
 */
public interface Factory {

     BuildLine defineBuildLine();
}
package com.java.dp.factory;

/**
 * @Author lizhilong
 * @create 2019/12/2 18:05
 * @desc  服装的核心工厂
 */
public class ClothesFactory implements Factory {
    @Override
    public BuildLine defineBuildLine() {
        return new ClothesLine();
    }
}

Spring Ioc 容器的实现原理就是工厂模式,下面的调用就是模仿IOC容器的实现原理

package com.java.dp.factory;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author lizhilong
 * @create 2019/12/2 17:34
 * @desc
 */
public class FactoryMain {

    private  static Map beanMap = new HashMap();
    static {
        try {
           beanMap.put("food",Class.forName("com.java.dp.factory.FoodFactory").newInstance());
           beanMap.put("clothse",Class.forName("com.java.dp.factory.ClothesFactory").newInstance());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
         Factory foodFactory  = (FoodFactory) beanMap.get("food");
         foodFactory.defineBuildLine().build();

         Factory clothseFactory = (Factory) beanMap.get("clothse");
         clothseFactory.defineBuildLine().build();
    }
}
-----------生产食品--------------
-----------生产衣服------------
原文地址:https://www.cnblogs.com/li-zhi-long/p/11975616.html