android 设计模式:工厂模式
2016-12-06 17:01
330 查看
放在开头:了解一个设计模式,首先也是最重要的就是了解它的设计依据
工厂模式按抽象的角度,层次不同分为:
抽象工厂方法 抽象工厂
先声明一点:下面提到的抽象类包括 接口,抽象类
抽象工厂方法设计依据:
一个抽象产品类,多个具体产品
一个抽象工厂类,多个具体工厂
下面用代码具象化的展示下
抽象产品,工厂
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 extends Product> T getFlower(Class<T> clazz);
}
public class FlowerFactroy implements Factroy {
@Override
public <T extends Product> T getFlower(Class<T> 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 extends Product> T getFlower(Class<T> clazz);
public <T extends Tree> T getTree(Class<T> clazz);
}
好了,实际运用的时候只要实现工厂类,产生各种具体的工厂,里面的产品可以自由组合
比如,现在我具体化一个生产菊花和松树的工厂JuHuaSongShuFactroy
public class JuHuaSongShuFactroy implements Factroy {
@Override
public <T extends Product> T getFlower(Class<T> clazz) {
Product flower;
flower = (Product) Class.forName(clazz.getName()).newInstance();
retrun (T) flower;
}
@Override
public <T extends Tree> T getTree(Class<T> clazzz) {
//具体的松树这个产品具体实现类,大家自己脑补一下
Tree tree;
tree = (Tree) Class.forName(clazz.getName()).newInstance();
return (T) tree;
}
}
好了各种组合的工厂,你自己去选择把,是不是很方便,哈哈
这种模式特定的场景也会去修改源码结构,这种弊端就不讲了,捂脸。
工厂模式按抽象的角度,层次不同分为:
抽象工厂方法 抽象工厂
先声明一点:下面提到的抽象类包括 接口,抽象类
抽象工厂方法设计依据:
一个抽象产品类,多个具体产品
一个抽象工厂类,多个具体工厂
下面用代码具象化的展示下
抽象产品,工厂
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 extends Product> T getFlower(Class<T> clazz);
}
public class FlowerFactroy implements Factroy {
@Override
public <T extends Product> T getFlower(Class<T> 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 extends Product> T getFlower(Class<T> clazz);
public <T extends Tree> T getTree(Class<T> clazz);
}
好了,实际运用的时候只要实现工厂类,产生各种具体的工厂,里面的产品可以自由组合
比如,现在我具体化一个生产菊花和松树的工厂JuHuaSongShuFactroy
public class JuHuaSongShuFactroy implements Factroy {
@Override
public <T extends Product> T getFlower(Class<T> clazz) {
Product flower;
flower = (Product) Class.forName(clazz.getName()).newInstance();
retrun (T) flower;
}
@Override
public <T extends Tree> T getTree(Class<T> clazzz) {
//具体的松树这个产品具体实现类,大家自己脑补一下
Tree tree;
tree = (Tree) Class.forName(clazz.getName()).newInstance();
return (T) tree;
}
}
好了各种组合的工厂,你自己去选择把,是不是很方便,哈哈
这种模式特定的场景也会去修改源码结构,这种弊端就不讲了,捂脸。
相关文章推荐
- C# 设计模式系列教程-简单工厂模式
- C++设计模式之工厂模式
- 介绍php设计模式中的工厂模式
- PHP设计模式之工厂模式与单例模式
- asp.net 简单工厂模式和工厂方法模式之论述
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- js简单工厂模式用法实例
- JavaScript设计模式经典之工厂模式
- javascript 模式设计之工厂模式详细说明
- 实例解析Java单例模式编程中对抽象工厂模式的运用
- python中getattr函数使用方法 getattr实现工厂模式
- 工厂模式在Zend Framework中应用介绍
- 浅析php工厂模式
- C++设计模式之抽象工厂模式
- C++设计模式之简单工厂模式实例
- c#使用简单工厂模式实现生成html文件的封装类分享
- PHP高级对象构建 工厂模式的使用
- 基于php设计模式中工厂模式详细介绍
- PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
- JavaScript面向对象程序设计教程