工厂模式(二)
来源:互联网 发布:数据库三张表关联查询 编辑:程序博客网 时间:2024/05/18 02:53
其实,工厂模式的应用很广泛,在我们使用的常用的类和方法里,也有工厂模式的影子。我们来学习以下这些例子
一.java.util.Calendar
在调用Calender的getInstance方法时,这个方法会根据传入信息返回合适的Calender子类对象。
这里抽象产品是Calendar,具体产品有:BuddhistCalendar,JapaneseImperialCalendar,GregorianCalendar
而工厂也是Calendar,这个工厂类提供了静态的getInstance方法返回各种具体产品
如果增加一种新的Calendar,那么只用修改getInstance方法,而Calendar的使用者不需要因为这种变化而修改代码。
java.util.Calendar这部分的代码逻辑如下:
public static Calendar getInstance()
{
Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
cal.sharedZone = true;
return cal;
}
public static Calendar getInstance(TimeZone zone)
{
return createCalendar(zone, Locale.getDefault());
}
public static Calendar getInstance(Locale aLocale)
{
Calendar cal = createCalendar(TimeZone.getDefaultRef(), aLocale);
cal.sharedZone = true;
return cal;
}
public static Calendar getInstance(TimeZone zone,
Locale aLocale)
{
return createCalendar(zone, aLocale);
}
private static Calendar createCalendar(TimeZone zone,
Locale aLocale)
{
// If the specified locale is a Thai locale, returns a BuddhistCalendar
// instance.
if ("th".equals(aLocale.getLanguage())
&& ("TH".equals(aLocale.getCountry()))) {
return new sun.util.BuddhistCalendar(zone, aLocale);
} else if ("JP".equals(aLocale.getVariant())
&& "JP".equals(aLocale.getCountry())
&& "ja".equals(aLocale.getLanguage())) {
return new JapaneseImperialCalendar(zone, aLocale);
}
// else create the default calendar
return new GregorianCalendar(zone, aLocale);
}
二.Spring中的工厂模式
Sping实现中应用到了工厂模式,我们可以把Spring容器堪称一个功能超强的工厂。外界使用配置文件来配置Bean,在你需要实例化一个Bean的时候(通常是单例的),Sping工厂就会去读取相应的配置文件,生成和管理这些实例。
Spring工厂不仅提供对产品的生成,还提供了产品的管理,包含对产品生命周期的管理,还有产品之间依赖关系的管理。
例如:
<beans>
<!-- 定义第一个balala,该bean的id为balala->
<bean id="chinese" class="xxx.Balala"/>
<!-- 定义第二个apple,该bean的id为apple-->
<bean id="american" class="xxx.Apple"/>
</beans>
在XML文件中可以做这样的配置,那么在外面就可以直接使用id获取相应的实例(产品)了
- 工厂模式(二)
- 工厂模式(二)
- 工厂模式(二)--工厂方法模式
- 简单工厂模式(二)
- 简单工厂模式(二)
- 简单工厂模式(二)
- 工厂模式(简单工厂模式, 工厂方法模式, 抽象工厂模式)二
- 设计模式(二)工厂方法模式+抽象工厂模式
- 设计模式(二)工厂模式:简单工厂模式
- [设计模式](二):工厂模式(简单工厂|静态工程、工厂方法|多工厂、抽象工厂)
- 模式二(工厂方法模式)
- 设计模式(二)---工厂模式
- 设计模式-工厂模式(二)
- 设计模式(二)---工厂方法模式
- 设计模式(二):抽象工厂模式
- Java设计模式----工厂模式(二)
- 设计模式实践(二)工厂模式
- 工厂模式---设计模式(二)
- Control File (二)重建CONTROLFILE --- NORESETLOG
- Date、DateFormat、Calendar
- 成功不是必然的,努力才是必須的
- gdb 调试段错误
- vmstat的使用以及显示的字段信息说明
- 工厂模式(二)
- 开始写学习博客
- ASP.NET AjaxPro的应用
- 值得一看的日语列表
- android开发之-数据共享(SharedPreferences )
- oracle的resetlogs机制浅析
- Linux图形界面中客户端、服务器、窗口管理器之间的关系
- Linux下到IPC(进程间通信方法比较)
- JS中正则表达式的使用