工厂模式学习
来源:互联网 发布:re管理器怎样改mac 编辑:程序博客网 时间:2024/06/14 05:50
工厂模式两种:工厂模式,抽象工厂模式。
工厂方法:把对象的实现延迟到子类完成。
使用场景:创建对象。
好处:降低客户端与模块之间的耦合度。(最少支持原则)
工厂模式传送门:http://blog.csdn.net/l2show/article/details/47704005
按照传送门的教程,把简单工厂模式学习一遍。//尝试用UML,把工厂模式绘制出来。现阶段的学习,只能的模仿,体会阶段。
套路:
创建一个接口。所有产品具有的公共功能(接口)。
public interface HttpBaseRequest { void httpRequest();}
创建产品类。实现接口。各个不同产品(具体实现子类,实现统一接口方法,里边各自实现自己的功能。)
public class SimulationGet implements HttpBaseRequest { public static final String TAG = SimulationGet.class.getSimpleName(); public String data; public SimulationGet(String data){ this.data = data; } @Override public void httpRequest() { doHttpGet(data); } private void doHttpGet(String data){ Log.e(TAG,"GET:" + data); }}
创建工厂类。返回类型:接口。方法返回具体子类。//可以根据传参,return 各自实现接口的子类。
public class HttpBaseRequestImp { public static final int POST = 1; public static final int GET = 2; public static HttpBaseRequest onCreate(int type,String data){ switch (type){ case POST: return new SimulationPost(data); case GET: return new SimulationGet(data); default: return new SimulationPost(data); } }}
//简单工厂模式 HttpBaseRequest httpBaseRequest = HttpBaseRequestImp.onCreate(HttpBaseRequestImp.GET,"执行Get请求"); httpBaseRequest.httpRequest(); httpBaseRequest = HttpBaseRequestImp.onCreate(HttpBaseRequestImp.POST,"执行Get请求"); httpBaseRequest.httpRequest();
我目前通过看这个例子,套路记住了,还是没有理解抽象工厂模式。添加泛型约束,就可以。后期理解。挖坑。。。。
先创建一个接口
public interface IPhone { void getOS();}
创建一个抽象类,对传入类型做约束。使用泛型。//首先通过泛型来约束输入输出的参数类型,把异常抛到上层去处理并实现具体的工厂.
public abstract class IGenerator { public abstract <T extends IPhone> T generatePhone(Class<T> clazz) throws Exception;}
public class PhoneGenerator extends IGenerator { //bugly 如何定义此处泛型 @Override public <T extends IPhone> T generatePhone(Class<T> clazz) throws Exception { IPhone iPhone = null; iPhone = (IPhone) Class.forName(clazz.getName()).newInstance(); return (T) iPhone; }}
抽象工厂如果后期需要添加新产品,只需要实现接口。通过反射动态调用即可。
public class XiaoMiPhone implements IPhone { public static final String TAG = XiaoMiPhone.class.getSimpleName(); @Override public void getOS() { Log.e(TAG,"小米"); }}
使用方法:调用该方法即可。
private void performIPhone(){ try{ //站在给开发者角度,去做。 XiaoMiPhone iGenerator = new PhoneGenerator().generatePhone(XiaoMiPhone.class); iGenerator.getOS(); }catch (Exception e){} }
总结,教了,学了,练的还不够,内化于心。加油了。。
在开发中,具体业务逻辑的使用场景,总结下:知道的有List 的迭代器iterator,Bitmap。
晚安。
阅读全文
0 0
- 工厂模式学习笔记
- 简单工厂模式学习
- 简单工厂模式学习
- 工厂模式学习
- 工厂模式学习
- 工厂模式的学习
- c++工厂模式学习
- 学习简单工厂模式
- 简单工厂模式学习
- 工厂模式学习
- 学习日记-工厂模式
- 工厂模式学习记录
- 抽象工厂模式学习
- 工厂模式学习
- 工厂模式学习
- 简单工厂模式学习
- 工厂模式学习笔记
- 工厂模式学习笔记
- 最全的关于onclick跳转的代码总结
- 《Angular之问题解决》
- Redis的常用命令:
- jsp基础知识-6.17
- myflag step14:打卡功能
- 工厂模式学习
- Gerrit使用篇-提交代码,合并代码
- 为一个视图设置自定义的背景颜色
- spring入门篇
- rails中使用flash变量启用消息提醒
- JAVA之“==”和“equals”的区别
- ubuntu搭建 nginx+php7+php-fpm+mysql
- sql 创建表、删除表 增加字段 删除字段操作
- html的有序列表与无序列表