Java设计模式应用——工厂模式

工厂模式有三种:简单工厂、工厂方法、抽象工厂

一、 抽象工厂

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();
        }
    }
}
原文地址:https://www.cnblogs.com/coshaho/p/6973873.html