一、工厂模式作用
使用工厂模式的作用:就是获取对象,让使用者并不关心其具体实现;
(符合最少知识原则)
例如:Bitmap bitmap = BitmapFactory.decodeResource(res, id);就是一个工厂模式,传入id拿到对应bitmap对象。
二、工厂模式有哪些
(Dog,Cat,Bird extends Animal)
1、简单工厂模式(根据传入类别不一样,返回需要的对象)
/** * 简单工厂模式 */ public class SimpleFactory {private static List<Animal> list = new ArrayList<>();public static Object getInstance(int type) {
Animal animal = list.get(type);
if (animal != null) {
return animal;
}
switch (type) {
case 1:
animal = new Dog();
break;
case 2:
animal = new Cat();
break;
case 3:
animal = new Bird();
break;
default:
animal = new Dog();
break;
}
return animal;
}
}
采用反射的方式:
public class CommonFactory { public <T extends Animal> T getInstance(Class<T> clz) { Animal animal = null; try { animal = (Animal) Class.forName(clz.getName()).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return (T) animal; } }
2、工厂方法(对象方法的实现,在子类实现)
public abstract class BaseFactory { public abstract Animal create(); }public class CatFactory extends BaseFactory{ @Override public Animal create() { return new Cat(); } }public class DogFactory extends BaseFactory{ @Override public Animal create() { return new Dog(); } }3、抽象工厂
三、工厂模式,把对象实现隐藏起来,使得调用者不需要关心对象实现。例子中,new出来的对象,但实际对象生成会更复杂,使用者并不关心其产生。这样实现代码耦合性降低,并且获取对象实现了代码复用。我开始就晕在这代码不更多了?但是重点在于,写的代码以后给别人去调用,就明白这样写的好处了。