读书笔记之工厂方法模式以及简单工厂模式

工厂方法模式介绍

工厂方法模式是创建型模式之一.在任何需要生成复杂对象的地方,都可以用工厂方法模式.比如一款产品有很多种类,如果每一个种类都用new来创建对象,那么就偏离了六大原则,所以就定义一个工厂类,通过这个类来完成产品的创建,这样当有新的产品需要生产时也只需要修改工厂类的代码.

工厂方法模式的简单实现

1.首先定义产品接口

public interface  Product{
    //产品的方法,由子类实现
    void method();
}

2.定义具体的子类产品

public class ProductA implement Product{

    public void method(){
        System.out.println("我是产品A");
    }
}


public class ProductB implement Product{

    public void method(){
        System.out.println("我是产品B");
    }
}


public class ProductC implement Product{

    public void method(){
        System.out.println("我是产品C");
    }
}

3.定义工厂接口

public interface  Factory{
    //创建产品的方法
  Product createProduct(Class clazz);
}

4.创建具体的工厂类

public class CreateFactory implement Factory{

    public  T createProduct(Class clazz){
        Product p =null;
        try{
            //通过反射动态创建对象,当然这里可以根据clazz判断,然后分别new出对象
            p =(Product)Class.froName(class.getName()).newInstance();
        }catch(Exception e){
            e.printStackTrace();
        }
        return (T)p;
    }
}

5.在Client利用工厂类创建具体的对象

public class Client{
    public static void main(String[] args){
        Factory fcatory = new CreateFactory();
        Product p = factory.createProduct(ProductA.class);
        p.method();
    }


}

这样在实际的代码中只需要创建工厂类的对象,然后调用工厂类中创建产品的方法,根据传入的参数就可以创建对应的产品了,这样即使要创建不同的产品也只要修改createProduct的参数即可.尽可能的满足了封闭原则.

简单工厂模式

在上面的工厂方法模式中唯一麻烦点的就是还要定义工厂类的接口,创建工厂类的具体对象才能创建对应的产品.为了更加方便的调用工厂的方法.我们可以将工厂类如下定义:

“`
public class CreateFactory {

public  static   T createProduct(Class clazz){
    Product p =null;
    try{
        //通过反射动态创建对象,当然这里可以根据clazz判断,然后分别new出对象
        p =(Product)Class.froName(class.getName()).newInstance();
    }catch(Exception e){
        e.printStackTrace();
    }
    return (T)p;
}

}“`

就是去掉了工厂接口的定义,同时将创建产品的方法定义成静态的这样,在实际代码中就可以直接通过类名定义了,但是这种情况一般是适用于工厂类只有一种创建产品的方法,为了方便就这样简写的,这样的模式就是简单工厂模式.

总结

工厂模式虽然简单,但是在我们的android中确用的非常之多,比如Bitmap的创建就是用的工厂方法BitmapFactory来创建的.

你可能感兴趣的:(设计模式)