工厂模式--我的理解

时间:2021-03-18 19:24:34

<百度百科>
工厂模式定义:实例化对象,用工厂方法代替new操作。
工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

      比喻:

         你想吃馒头了,这时你只要打个电话给做馒头的工厂,这个馒头相当于一个接口,工厂就会根据做馒头的秘方(properties文件)给你做好馒头,然后送给你(实现接口)


1 。馒头工厂类:

import java.io.IOException;import java.util.Properties;
/** * 业务工厂 * 利用工厂模式来隔离业务和界面 * 利用配置来调用实现类 * 界面上面跑的都是接口 * @author lee * */public class MantouFactory {
public static Properties properties; static {//不用生成类的实例就能直接调用 properties = new Properties(); //加载配置文件 try {properties.load(MantouFactory.class.getClassLoader().getResourceAsStream("mantou.properties"));} catch (IOException e) {e.printStackTrace();} } /** * 获取实例 * @param clazz * @return */ @SuppressWarnings("unchecked") public static<T> T get(Class<T> clazz)//传入馒头接口 { //泛型编程,T可以传各种类,实现灵活访问 String simpleName = clazz.getSimpleName(); String className = properties.getProperty(simpleName); //clazz.getName()//全名 try { return (T) Class.forName(className).newInstance(); } catch (Exception e) {e.printStackTrace();} return null; }}


2 `馒头的配方(键值对)

Mantou=com.lee.test.mantou.implement.mantouImpl

(馒头接口的实现类名)


3 `定义馒头接口

public interface ManTou(){

  public abstract  void MantouImplementMethod();

}


4  具体实现馒头 接口的馒头实现类

public class MantouImplement implements Mantou(){

   public void MantouImplementMethod(){

         //拿到馒头了,吃馒头

     }

}


5  具体调用哪吃馒头的方法:

    A  没用工厂模式之前:

           MantouImplement  吃馒头 = new MantouImplement();

    B  调用工厂模式之后:

        ManTou 吃馒头 = MantouFactory.get(ManTou.class);


比较俩者的优缺点:

                 A 可扩展性比较差,当需要吃别的馒头时,需要重新new 一个生产馒头的方法

                B 工厂模式的话,就只需要去配方里面修改一下配方,随你吃肉包还是菜包等............