工厂模式总结
1.工厂模式在 JDK-Calendar 应用的源码分析
1) JDK 中的 Calendar 类中, 就使用了简单工厂模式
package demo.factory.JDKSRC;
import java.util.Calendar;
public class CalenderDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
}
}
/**
* Gets a calendar using the default time zone and locale. The
* <code>Calendar</code> returned is based on the current time
* in the default time zone with the default
* {@link Locale.Category#FORMAT FORMAT} locale.
*
* @return a Calendar.
*/
public static Calendar getInstance()
{
return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
}
/**
* Gets a calendar with the specified time zone and locale.
* The <code>Calendar</code> returned is based on the current time
* in the given time zone with the given locale.
*
* @param zone the time zone to use
* @param aLocale the locale for the week data
* @return a Calendar.
*/
public static Calendar getInstance(TimeZone zone,
Locale aLocale)
{
return createCalendar(zone, aLocale);
}
private static Calendar createCalendar(TimeZone zone,
Locale aLocale)
{
CalendarProvider provider =
LocaleProviderAdapter.getAdapter(CalendarProvider.class, aLocale)
.getCalendarProvider();
if (provider != null) {
try {
return provider.getInstance(zone, aLocale);
} catch (IllegalArgumentException iae) {
// fall back to the default instantiation
}
}
Calendar cal = null;
if (aLocale.hasExtensions()) {
String caltype = aLocale.getUnicodeLocaleType("ca");
if (caltype != null) {
switch (caltype) {
case "buddhist":
cal = new BuddhistCalendar(zone, aLocale);
break;
case "japanese":
cal = new JapaneseImperialCalendar(zone, aLocale);
break;
case "gregory":
cal = new GregorianCalendar(zone, aLocale);
break;
}
}
}
2.工厂模式小结
1) 工厂模式的意义
将实例化对象的代码提取出来, 放到一个类中统一管理和维护, 达到和主项目的依赖关系的解耦。 从而提高项
目的扩展和维护性。
2) 三种工厂模式 (简单工厂模式、 工厂方法模式、 抽象工厂模式)
3) 设计模式的依赖抽象原则
创建对象实例时, 不要直接 new 类, 而是把这个 new 类的动作放在一个工厂的方法中, 并返回。 有的书上说,
变量不要直接持有具体类的引用。
不要让类继承具体类, 而是继承抽象类或者是实现 interface(接口)
不要覆盖基类中已经实现的方法

浙公网安备 33010602011771号