设计模式之【工厂模式】 (2)

/** * 属性文件读取类 * * @author bear * */ public class PropertiesReader { /** * 读取属性文件里的键值对到map中,然后返回 * * @return */ public Map<String, String> getProperties(){ Properties props = new Properties(); Map<String, String> map = new HashMap<String, String>(); try { InputStream is = this.getClass().getResourceAsStream("Type.properties"); props.load(is); Enumeration en = props.propertyNames(); while (en.hasMoreElements()) { String key = (String) en.nextElement(); String property = props.getProperty(key); map.put(key, property); } } catch (Exception e) { // TODO: handle exception } return map; } }
这里的属性文件名叫做Type.properties,它的内容是这种:

men=com.bear.factorypattern.MensWear women=com.bear.factorypattern.WomansWear children=com.bear.factorypattern.ChildrensWear
然后我们在Clothing这种一个实体类中定义几个key的常量值:

/** * 服饰类 * * @author bear * */ public class Clothing { public static final String Men = "men"; public static final String Women = "women"; public static final String Children = "children"; }


最后,我们在client的Main方法中,来通过工厂获取到我们须要的实例:

public class UITest { public static void main(String[] args) { ClothingFactory factory = new ClothingFactory(); ClothingInterface clothing01 = factory.newInstance(Clothing.Men); clothing01.draw(); ClothingInterface clothing02 = factory.newInstance(Clothing.Women); clothing02.draw(); ClothingInterface clothing03 = factory.newInstance(Clothing.Children); clothing03.draw(); } }


打印结果例如以下: **************男装************ **************女装************ **************童装************
总结:在以上的演示样例中,假设我们要新加入一种服饰。须要的操作是:

(1).新建服饰类。该类须要实现ClothingInterface接口。

(2).在properties属性文件里添加映射关系;

(3).在Clothing类中加入常量key。


工厂模式演示样例代码下载链接:

FactoryPatternDemo


抽象工厂模式实际上就是有一个新的接口。那么这个接口中包括了一系列的相关的接口产品簇,抽象工厂专门负责生产产品簇,而非单个产品。


常见工厂模式的应用:

(1).JDBC

是一种用于运行SQL语句的Java API,能够为多种关系数据库提供统一訪问,它由一组用Java语言编写的类和接口组成。

设计模式之【工厂模式】



(2)Spring BeanFactory

BeanFactory,作为Spring基础的IOC容器,是Spring的一个Bean工厂。

假设但从工厂模式的角度思考,它就是用来“生产Bean”,然后提供给client。

Bean的实例化过程:

a.调用Bean的默认构造方法,或指定的构造方法,生成Bean实例(暂称instance1);

b.假设Bean的配置文件里注入了Bean属性值。则在instance1基础上进行属性注入形成instance2。这样的注入是覆盖性的;

c.假设Bean实现了InitializingBean接口,则调用afterPropertiesSet()方法,来改变或操作instance2。得到instance3;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwgyx.html