在Android开发中,最常见的工厂模式应该就是Bitmap的创建了,因为Bitmap的创建是分很多种方式的,我们可以使用本地文件来创建Bitmap对象,也可以使用网络上的资源来创建Bitmap对象,具体方法如下:
BitmapFactory.decodeResource(this.getResources(),R.drawable.haha); //使用本地文件
HttpURLConnection con = (HttpURLConnection) conurl.openConnection();
BitmapFactory.decodeStream(con.getInputStream()); //使用网络资源
下面来模拟一下Bitmap对象的创建过程
- 创建抽象产品类
public abstract class BitmapProduct {
//定义属性及方法
public void method(){
}
}
- 创建具体产品类
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对象
- 创建抽象工厂类
public abstract class BitmapFactory {
public abstract BitmapProduct createBitmap();
}
- 创建具体工厂类
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();
}
}
除了上述的一般方法之外,我们也可以使用反射来进行创建,不过鉴于反射会对性能产生影响,要慎用
- 抽象工厂类
public abstract class BitmapFactory {
public abstract <T extends BitmapProduct> T createBitmap(Class<T> tClass);
}
- 具体工厂类
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);
}
}