您的位置:首页 > 其它

工厂方法模式

2016-12-25 17:38 190 查看
《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();

}

}

*****************************************************************************************************************

此时,需要哪一个类,就传入哪个类的类型即可。当有多个工厂时,可以分别实现某个具体的产品;而若只有一个工厂类时,可以将工厂方法改为静态方法。

四。总结

  工厂方法模式是完全符合设计原则的,其降低了对象之间的耦合度,而且工厂方法依赖于抽象的架构,其将实例化交由子类去完成,有很好的扩展行。

  但是,其缺点也是不可避免的,每次为工厂方法模式添加新的产品时,就要编写一个新的产品类,同事还要引入抽象层,着必然会导致类的结构的复杂化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: