复杂对象的创建-工厂方法模式

在Android开发中,最常见的工厂模式应该就是Bitmap的创建了,因为Bitmap的创建是分很多种方式的,我们可以使用本地文件来创建Bitmap对象,也可以使用网络上的资源来创建Bitmap对象,具体方法如下:

BitmapFactory.decodeResource(this.getResources(),R.drawable.haha); //使用本地文件
HttpURLConnection con = (HttpURLConnection) conurl.openConnection();
BitmapFactory.decodeStream(con.getInputStream()); //使用网络资源
下面来模拟一下Bitmap对象的创建过程
  1. 创建抽象产品类
public abstract class BitmapProduct {
    //定义属性及方法
    public void method(){
    }
}
  1. 创建具体产品类
public class srcBiamapProduct extends BitmapProduct {
    @Override
    public void method() {
        System.out.print("srcBitmap");
    }
}

本地文件生成的Bitmap对象

public class networkBitmapProduct extends BitmapProduct {
    @Override
    public void method() {
        System.out.print("networkBitmapProduct");
    }
}

网络资源生成的Bitmap对象

  1. 创建抽象工厂类
public abstract class BitmapFactory {
    public abstract BitmapProduct createBitmap();
}
  1. 创建具体工厂类
public class concreteFactory extends BitmapFactory {
    @Override
    public BitmapProduct createBitmap() {
        return new srcBiamapProduct();
    }
}
使用如下:
public class Main {
    public static void main(String[] args) {
        BitmapFactory bitmapFactory = new concreteFactory();
        bitmapFactory.createBitmap();
    }
}
这里的Bitmap创建和我们在Android开发时所使用的工厂模式还是有区别的,因为在Android中Bitmap创建采用的时静态工厂模式,像这样
public  class BitmapFactory {
    public static srcBiamapProduct createBitmap() {
        return new srcBiamapProduct();
    }
}
除了上述的一般方法之外,我们也可以使用反射来进行创建,不过鉴于反射会对性能产生影响,要慎用
  1. 抽象工厂类
public abstract class BitmapFactory {
    public abstract <T extends BitmapProduct> T createBitmap(Class<T> tClass);
}
  1. 具体工厂类
public class concreteFactory extends BitmapFactory {
    @Override
    public <T extends BitmapProduct> T createBitmap(Class<T> tClass) {
        BitmapProduct bitmapProduct = null;
        try {
            bitmapProduct = (BitmapProduct) Class.forName(tClass.getName()).newInstance();
        }catch (Exception e) {
            e.printStackTrace();
        }
        return (T) bitmapProduct;
    }
}
使用
public class Main {
    public static void main(String[] args) {
        BitmapFactory bitmapFactory = new concreteFactory();
        bitmapFactory.createBitmap(srcBiamapProduct.class);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值