工厂模式有三种:简单工厂、工厂方法、抽象工厂
一、 抽象工厂
1、 一个可以生产多种产品的工厂;
2、 不改变工厂无法生产新的产品。
package com.coshaho.learn.factory; public class SimpleFactory
{
// 绝对值告警
public class AbsoluteAlarm
{} // 历史值告警
public class HistoryAlarm
{} // 简单工厂
public class AlarmFactory
{
public AbsoluteAlarm createAbsoluteAlarm()
{
return new AbsoluteAlarm();
} public HistoryAlarm createHistoryAlarm()
{
return new HistoryAlarm();
}
}
}
二、 工厂方法
1、 每个工厂只能生产一种产品;
2、 想要生产新产品只需要新建一个工厂即可;
3、 产品过多,可能导致工厂过多。
package com.coshaho.learn.factory; public class FactoryMethod
{
// 绝对值告警
public class AbsoluteAlarm
{} // 历史值告警
public class HistoryAlarm
{} // 绝对值告警工厂
public class AbsoluteAlarmFactory
{
public AbsoluteAlarm createAbsoluteAlarm()
{
return new AbsoluteAlarm();
}
} // 历史值告警工厂
public class HistoryAlarmFactory
{
public HistoryAlarm createHistoryAlarm()
{
return new HistoryAlarm();
}
}
}
三、 抽象工厂
1、 抽象工厂可以生产一系列产品;
2、 产品系列中的每类产品有多种型号;
3、 继承于抽象工厂的具体工厂只能生产一种系列产品;
4、 新增一个具体工厂则可以新增一个产品系列;
5、 不改变抽象工厂代码无法增减产品系列中的产品类型。
package com.coshaho.learn.factory; public class AbstractFactory
{
// 告警
public interface Alarm
{} // 绝对值告警
public class AbsoluteAlarm implements Alarm
{} // 报表
public interface Report
{} // Excel报表
public class ExcelReport implements Report
{} // 抽象工厂
public interface IFactory
{
public Alarm createAlarm();
public Report createReport();
} // 具体工厂
public class Factory
{
public Alarm createAlarm()
{
return new AbsoluteAlarm();
}
public Report createReport()
{
return new ExcelReport();
}
}
}