工厂模式学习笔记
来源:互联网 发布:淘宝网淘宝商城 编辑:程序博客网 时间:2024/05/22 15:39
工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类时哪一个,工厂方法让类把实例化推迟到子类。
工厂方法模式能够封装具体类型的实例化。
将创建对象的代码集中在一个对象或方法中,可以避免代码中的重复,并且更方便以后的维护。这也意味着客户在实例化对象时,只会依赖于接口,而不是具体类。可以帮助我们针对接口编程。而不针对实现编程。让代码更具有弹性,可以应对未来的扩展。
加载配置文件:
package com.zsq.project;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class PropertiesRead { private static Properties properties = new Properties(); static { try { try (InputStream is = PropertiesRead.class.getResourceAsStream("type.properties")) { properties.load(is); } } catch (IOException e) { e.printStackTrace(); } } public static Properties getProperties() { return properties; }}配置文件内容;
left=com.zsq.project.LeftHair生成对象的实现方式如下:
package com.zsq.project;/** * 发型工厂 */public class HairFactory { /** * 根据类型来创建对象 * * @param key * @return */ public HairInterface getHair(String key) { if ("left".equals(key)) { return new LeftHair(); } else if ("right".equals(key)) { return new RightHair(); } return null; } public HairInterface getHairByClassKey(String key) { try { return (HairInterface) Class.forName(PropertiesRead.getProperties().getProperty(key)).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; } public HairInterface getHairByClass(String className) { try { HairInterface hair = (HairInterface) Class.forName(className).newInstance(); return hair; } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; } public HairInterface getHairByClass(Class<? extends HairInterface> clazz) { try { return clazz.newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; }}
视频地址
通用工厂类:
public class FactoryTest<T> { public T getInstance(Class<? extends T> t) { try { return t.newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; }}
工厂方式模式和抽象工厂模式对比:
①工厂模式一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂模式的推广
②工厂模式用来创建一个产品的等级架构,而抽象工厂模式是用来创建多个产品的等级架构
③工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类
工厂模式的好处:
①系统可以在不修改具体工厂角色的情况下引进新的产品
②客户端不必关心对象如何创建,明确了职责
③更好的理解面向对象的原则,面向接口编程,而不要面向实现编程
工厂模式适用于哪些场景:
①一个系统应当不依赖于产品类实例被创立,组成,和表示的细节,这对于所有形态的工厂模式都是重要的
②这个系统的产品有至少一个的产品族
③同属于同一个产品族的产品是设计成在一起使用的,这一约束必须得在系统的设计中体现出来
④不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实现的细节
阅读全文
0 0
- 工厂模式学习笔记
- 工厂模式学习笔记
- 工厂模式学习笔记
- 工厂模式学习笔记
- 工厂模式学习笔记
- 工厂模式 学习笔记
- 简单工厂模式学习笔记
- 学习笔记:简单工厂模式
- 抽象工厂模式-- 学习笔记
- 工厂方法模式--学习笔记
- 工厂模式的学习笔记
- 学习笔记:简单工厂模式
- spring学习笔记工厂模式
- Java学习笔记-工厂模式
- 【学习笔记】抽象工厂模式
- Android工厂模式学习笔记
- 设计模式学习笔记之工厂模式
- 设计模式学习笔记--工厂模式
- TCP的粘包问题
- hadoop学习总结
- CF888G Xor-MST
- hibernate框架一对多级联保存例子(十二)
- Android调用系统拨号功能
- 工厂模式学习笔记
- iOS RAC~ReactiveCocoa 方法作用
- centOS目录结构详细版
- Velocity
- WCF测试客户端(WcfTestClient)
- dubbo-Exception
- 卡特兰数
- CF 376C Divisible By Seven 同余+暴力
- 算法的评价标准:ROC,假阳性,mape