zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
  • 相关阅读:
    flask点滴
    CMD批量处理
    pymssql中文乱码
    vb cllection
    更改用户环境变量
    解开未完成的事务,用变量接收另一个存储过程反回的值
    gitlab-ci一些笔记
    Linux系统查看cache/buffer占用比较大的进程
    kubeadm证书过期解决方案
    ceph12版本部署实践
  • 原文地址:https://www.cnblogs.com/coshaho/p/6973873.html
Copyright © 2011-2022 走看看