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

工厂方法模式介绍

工厂方法模式是创建型模式之一.在任何需要生成复杂对象的地方,都可以用工厂方法模式.比如一款产品有很多种类,如果每一个种类都用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{
    //创建产品的方法
  <T>Product createProduct(Class<T> clazz);
}

4.创建具体的工厂类

public class CreateFactory implement Factory{

    public <T extend Product> T createProduct(Class<T> 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 extend Product> T createProduct(Class<T> 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来创建的.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值