Java 工厂模式变形的多种应用(2)

public class ConcrentCreator extends Creator{

@Override
 public <T extends PlatForm> T createProduct(Class<T> c) {
  PlatForm plat = null;
  try {
   /**
    * 创建一个用于创建对象的接口,让子类去确定实例化哪一个对象。工厂方法,让一个类的实例化延迟到子类
    */
   plat = (PlatForm) Class.forName(c.getName()).newInstance();
  } catch (InstantiationException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
  return (T) plat;
 }

}

package factory;

public class Client {
 public static void main(String[] args) {
  Creator creator = new ConcrentCreator();
  //在这里可以把你要实例化的类给传进去,然后即可调用你想要的方法。
  PlatForm plat = creator.createProduct(BaiduProduct.class);
  plat.search();
  plat.music();
 }
}

在这里面模仿了一个客户端,就可以输出你想要的结果。

在工厂模式方法中抽象产品类负责定义产品的共性,实现实物最抽象的定义;creator为产品抽喜创建类,也就是抽象工厂具体如何创建产品类有具体的实现creator的工厂类来完成,工厂类的变种很多,下面,我总结类一个比较通用的源码。

1:抽象产品类

package factory.total;

public abstract class Product {
 public void method1(){
  //所有产品的共性
 }
 //抽象方法  具体有继承它的类去实现
 public abstract void method2();
}

2:产品实现类

package factory.total;

public class ConcretProduct1 extends Product{

@Override
 public void method2() {
  //TODO
 }

}

package factory.total;

public class ConcretProduct2 extends Product{

@Override
 public void method2() {
  //TODO
 }

}

3:抽象工厂类

package factory.total;

public abstract class Creator {
 public abstract <T extends Product> T createMethod(Class<T> c);
 
}

4:具体工厂类:

package factory.total;

public class ConcreteCreator extends Creator{

@Override
 public <T extends Product> T createMethod(Class<T> c) {
  Product pro = null;
  try {
   pro = (Product) Class.forName(c.getName()).newInstance();
  } catch (InstantiationException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
  return (T) pro;
 }

}

场景模拟类

package factory.total;

public class Client {
 public static void main(String[] args) {
  Creator creator = new ConcreteCreator();
  Product pro = creator.createMethod(ConcretProduct1.class);
  pro.method1();
  pro.method2();
 }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8438d4094b0bc060cefc88e444007efe.html