工厂方法模式

来源:互联网 发布:文章植入广告软件 编辑:程序博客网 时间:2024/05/17 10:54

《Android设计模式》笔记,如有侵权,请联系我删除,谢谢


一。定义
  定义一个用于创建对象的借口,让子类决定实例化哪个类
二。使用场景
  在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式
三。实现
  可以利用反射的方式简洁第来生产具体的产品对象,需要在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类。
*****************************************************************************************************************
package com.yinazh.designpattern;

public abstract class Product{
public abstract void method();
}

public class COncreteProductA extends Product{
public void method(){
System.out.println("product A");
}
}

public class COncreteProductB extends Product{
public void method(){
System.out.println("product B");
}
}

public abstract class Factory{
public abstract <T extends Product> T createProduct(Class<T> clz);
}

public class ConcreteFactory extends Factory{
public <T extends Product> T createProduct(Class<T> clz){
Product p = null;
try{
p = (Product)Class.forName(clz.getName()).newInstance();
}catch(Exception e){
e.printStactTrace();
}
return (T)p;
}
}

public class Client{
public static void main(String[] args){
Factory factory = new ConcreteFactory();
Product p = factory.createProduct(COncreteProductA.class);
p.method();
}
}
*****************************************************************************************************************
此时,需要哪一个类,就传入哪个类的类型即可。当有多个工厂时,可以分别实现某个具体的产品;而若只有一个工厂类时,可以将工厂方法改为静态方法。
四。总结
  工厂方法模式是完全符合设计原则的,其降低了对象之间的耦合度,而且工厂方法依赖于抽象的架构,其将实例化交由子类去完成,有很好的扩展行。
  但是,其缺点也是不可避免的,每次为工厂方法模式添加新的产品时,就要编写一个新的产品类,同事还要引入抽象层,着必然会导致类的结构的复杂化。

0 0