糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > android工厂模式源码 android 设计模式:工厂模式

android工厂模式源码 android 设计模式:工厂模式

时间:2019-11-22 10:08:41

相关推荐

android工厂模式源码 android 设计模式:工厂模式

放在开头:了解一个设计模式,首先也是最重要的就是了解它的设计依据

工厂模式按抽象的角度,层次不同分为:

抽象工厂方法 抽象工厂

先声明一点:下面提到的抽象类包括 接口,抽象类

抽象工厂方法设计依据:

一个抽象产品类,多个具体产品

一个抽象工厂类,多个具体工厂

下面用代码具象化的展示下

抽象产品,工厂

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 设计模式:工厂模式》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。