放在开头:了解一个设计模式,首先也是最重要的就是了解它的设计依据
工厂模式按抽象的角度,层次不同分为:
抽象工厂方法 抽象工厂
先声明一点:下面提到的抽象类包括 接口,抽象类
抽象工厂方法设计依据:
一个抽象产品类,多个具体产品
一个抽象工厂类,多个具体工厂
下面用代码具象化的展示下
抽象产品,工厂
public interface Product {
public void flower();
}
public interface Factory {
public Product getFlower();
}
多个具体产品,具体工厂
public class JuHua implements Product {
@Override
public void flower() {
Log.i("shan","flower: ju hua");
}
}
public class MeiGui implements Product {
@Override
public void flower() {
Log.i("shan","flower: mei gui");
}
}
多个工厂,一个工厂只生产一种产品
public class JuHuaFactory implements Factroy {
@Override
public Product getFlower() {
return new JuHua();
}
}
public class MeiGuiFactroy implements Factroy {
@Override
public Product getFlower() {
return new MeiGui();
}
}
使用的时候你你需要那种花,就实例化对应的工厂
上面就是标准的工厂方法,不知到大家看着感觉怎样,我感觉挺繁琐的。如果产品多了,那得多少个对应的工厂啊。。。
所以下面再介绍一个变种,核心思想时工厂生产返回的产品类型是个泛型。且看我接下来对抽象工厂类的修改
public interface Factroy {
public T getFlower(Class clazz);
}
public class FlowerFactroy implements Factroy {
@Override
public T getFlower(Class clazz) {
Product flower;
flower = (Product) Class.forName(clazzz.getName()).newInstance();
return (T) flower;
}
}
OK 就这样
抽象工厂模式
多个抽象产品,多个具体产品
一个抽象工厂,多个具体工厂
抽象工厂方法模式中所有的产品都是由一个抽象类衍生的,工厂模式可以生产更多新产品,产品的行为完全可以你自己定义
好的,上例已抽象出一个flower的Product接口(起名为Flower会更好),现在我重新抽象一个tree的Tree接口
public interface Tree {
public void tree();
}
改一下抽象工厂接口
public interface Factroy {
public T getFlower(Class clazz);
public T getTree(Class clazz);
}
好了,实际运用的时候只要实现工厂类,产生各种具体的工厂,里面的产品可以自由组合
比如,现在我具体化一个生产菊花和松树的工厂JuHuaSongShuFactroy
public class JuHuaSongShuFactroy implements Factroy {
@Override
public T getFlower(Class clazz) {
Product flower;
flower = (Product) Class.forName(clazz.getName()).newInstance();
retrun (T) flower;
}
@Override
public T getTree(Class clazzz) {
//具体的松树这个产品具体实现类,大家自己脑补一下
Tree tree;
tree = (Tree) Class.forName(clazz.getName()).newInstance();
return (T) tree;
}
}
好了各种组合的工厂,你自己去选择把,是不是很方便,哈哈
这种模式特定的场景也会去修改源码结构,这种弊端就不讲了,捂脸。
如果觉得《android工厂模式源码 android 设计模式:工厂模式》对你有帮助,请点赞、收藏,并留下你的观点哦!