爪哇 2博客
  爪哇 2博客

爪哇 中的开放式封闭原则

在本教程中,我们将学习竞彩篮球分析中的开放式封闭设计原理。开放式封闭原理是其中的一种。 固体 原则.

开放式封闭设计原则规定“软件实体(类,模块,功能等)应为扩展而开放,而为修改而封闭”。此定义由Bertrand Meyer提供。

一旦我们编写了该类并对其进行了测试,就不应一次又一次地对其进行修改,而应该对其进行扩展。如果我们修改了已经测试过的类,可能会导致很多额外的工作来进行测试,并且还有机会用于引入新的错误。

策略设计模式是开放式封闭设计原则的另一个示例。服务类可以根据需求使用各种策略来执行某些任务,因此我们将通过引入新的将实现策略接口的策略来保持服务类关闭,但同时系统也可以扩展。在运行时,您可以根据需要使用任何新策略调用服务类。

让’借助于一个简单的例子就可以理解。
您需要根据输入类型创建两种类型的报告(CSV和XML)。请注意,将来应提供新的报告类型。

创建一个名为"ReportType.java" as below.

1
2
3
4
5
6
 
组织 . Arpit . 爪哇 2blog ;
上市 枚举 报告类型 {
     CSV , XML格式 格式 ;
}
 

创建名为ReportingService的服务类,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
组织 . Arpit . 爪哇 2blog ;
 
上市 ReportingService {
 
     上市 虚空 generateReportBasedOnType(报告类型 reportType)
    {
         系统 .. 打印 (“ ==================================);
         系统 .. 打印 (“基于类型生成报告”);
         系统 .. 打印 (“ ==================================);
 
         如果 ( “ CSV ” .equalsIgnoreCase(reportType. toString ()))
        {
            generateCSVReport();
        }
         其他 如果 ( “ XML格式 ” .equalsIgnoreCase(reportType. toString ()))
        {
            generateXMLReport();
        }
    }
 
     私人的 虚空 generateCSVReport()
    {
         系统 .. 打印 (“生成CSV报告”);
    }
 
     私人的 虚空 generateXMLReport()
    {
         系统 .. 打印 (“生成XML报告”);
    }
}
 

创建一个名为的主类"GenerateReportMain.java"它将调用ReportingService生成报告。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
组织 . Arpit . 爪哇 2blog ;
 
上市 GenerateReportMain {
 
     上市 静态的 虚空 主要 ([] args ) {
        ReportingService rs = ReportingService();
 
        //生成CSV文件
         rs .generateReportBasedOnType(报告类型. CSV );
 
         系统 .. 打印 ();
 
        //生成XML文件
         rs .generateReportBasedOnType(报告类型. XML格式 格式 );
 
    }
 
}
 

输出:

==================================
根据类型生成报告
==================================
生成CSV报告

==================================
根据类型生成报告
==================================
生成XML报告

如您所见,这是简单的代码,效果很好。您已经测试了代码,发现能够根据类型生成报告。
现在,您需要再创建一种报表类型,即Excel。如果您注意到,则需要进行如下更改:
1)您需要在Enum 报告类型中进行更改。

1
2
3
4
5
6
 
组织 . Arpit . 爪哇 2blog ;
上市 枚举 报告类型 {
     CSV , XML格式 格式 , 卓越 ;
}
 

2)您需要在已经测试过的ReportingService类中进行更改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
组织 . Arpit . 爪哇 2blog ;
 
上市 ReportingService {
 
     上市 虚空 generateReportBasedOnType(报告类型 reportType)
    {
         系统 .. 打印 (“ ==================================);
         系统 .. 打印 (“基于类型生成报告”);
         系统 .. 打印 (“ ==================================);
 
         如果 ( “ CSV ” .equalsIgnoreCase(reportType. toString ()))
        {
            generateCSVReport();
        }
         其他 如果 ( “ XML格式 ” .equalsIgnoreCase(reportType. toString ()))
        {
            generateXMLReport();
        }
         其他 如果 ( “ Excel” .equalsIgnoreCase(reportType. toString ()))
        {
            generateExcelReport();
        }
    }
 
     私人的 虚空 generateCSVReport()
    {
         系统 .. 打印 (“生成CSV报告”);
    }
 
     私人的 虚空 generateXMLReport()
    {
         系统 .. 打印 (“生成XML报告”);
    }
 
     私人的 虚空 generateExcelReport() {
         系统 .. 打印 (“生成Excel报告”);
    }
}
 

现在,您可以如下生成Excel报告。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
组织 . Arpit . 爪哇 2blog ;
 
上市 GenerateReportMain {
 
     上市 静态的 虚空 主要 ([] args ) {
        ReportingService rs = ReportingService();
 
        //生成CSV文件
         rs .generateReportBasedOnType(报告类型. CSV );
 
         系统 .. 打印 ();
 
        //生成XML文件
         rs .generateReportBasedOnType(报告类型. XML格式 格式 );
 
         系统 .. 打印 ();
 
        //生成Excel文件
         rs .generateReportBasedOnType(报告类型. 卓越 );      
    }
}
 

输出:

==================================
根据类型生成报告
==================================
生成CSV报告

==================================
根据类型生成报告
==================================
生成XML报告

==================================
根据类型生成报告
==================================
产生Excel报表

如您所见,我们必须在许多已经测试过的地方进行修改,并且需要再次重新测试所有功能。

开闭设计原则

让’s看到开放式封闭设计原理将如何解决问题。
如下创建ReportingService.java。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
组织 . Arpit . 爪哇 2blog ;
 
上市 ReportingService {
 
     上市 虚空 generateReportBasedOnStrategy(报告策略 报表策略)
    {
         系统 .. 打印 (“ ==================================);
         系统 .. 打印 (“基于策略生成报告”);
         系统 .. 打印 (“ ==================================);
 
        报表策略.generateReport();
         系统 .. 打印 ();
    }
}
 

如下创建一个名为ReportingStrategy的接口。

1
2
3
4
5
6
7
 
组织 . Arpit . 爪哇 2blog ;
 
上市 接口 报告策略 {
     虚空 generateReport();
}
 

创建一个名为的类"CSVReportingStrategy.java"用于生成CSV报告

1
2
3
4
5
6
7
8
9
10
11
 
组织 . Arpit . 爪哇 2blog ;
 
上市 CSV ReportingStrategy 实施 报告策略 {
 
    @ 覆写
     上市 虚空 generateReport() {
         系统 .. 打印 (“生成CSV报告”);
    }
}
 

创建一个名为的类"XMLReportingStrategy.java"用于生成XML报告

1
2
3
4
5
6
7
8
9
10
11
 
组织 . Arpit . 爪哇 2blog ;
 
上市 XML格式 格式 ReportingStrategy 实施 报告策略 {
 
    @ 覆写
     上市 虚空 generateReport() {
         系统 .. 打印 (“生成XML报告”);
    }
}
 

让’现在创建一个主类GenerateReportMain.java。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
组织 . Arpit . 爪哇 2blog ;
 
上市 GenerateReportMain {
 
     上市 静态的 虚空 主要 ([] args ) {
        ReportingService rs = ReportingService();
 
        //生成CSV报告
        报告策略 csvReportingStrategy= CSV ReportingStrategy();
         rs .generateReportBasedOnStrategy(csvReportingStrategy);
 
        //生成XML报告
        报告策略 xmlReportingStrategy= XML格式 格式 ReportingStrategy();
         rs .generateReportBasedOnStrategy(xmlReportingStrategy);
    }
}
 

输出:

==================================
根据类型生成报告
==================================
生成CSV报告

==================================
根据类型生成报告
==================================
生成XML报告

让’s说您要生成Excel报告。您需要创建以下更改:
创建另一个名为"ExcelReportingStrategy.java" as below.

1
2
3
4
5
6
7
8
9
10
11
 
组织 . Arpit . 爪哇 2blog ;
 
上市 ExcelReportingStrategy 实施 报告策略 {
 
    @ 覆写
     上市 虚空 generateReport() {
         系统 .. 打印 (“生成Excel报告”);
    }
}
 

更改GenerateReportMain.java以添加调用代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
组织 . Arpit . 爪哇 2blog ;
 
上市 GenerateReportMain {
 
     上市 静态的 虚空 主要 ([] args ) {
        ReportingService rs = ReportingService();
 
        //生成CSV报告
        报告策略 csvReportingStrategy= CSV ReportingStrategy();
         rs .generateReportBasedOnStrategy(csvReportingStrategy);
 
        //生成XML报告
        报告策略 xmlReportingStrategy= XML格式 格式 ReportingStrategy();
         rs .generateReportBasedOnStrategy(xmlReportingStrategy);
 
        //生成Excel报表
        报告策略 ExcelReportingStrategy= ExcelReportingStrategy();
         rs .generateReportBasedOnStrategy(ExcelReportingStrategy);
 
    }
}
 

输出:

==================================
根据策略生成报告
==================================
生成CSV报告

==================================
根据策略生成报告
==================================
生成XML报告

==================================
根据策略生成报告
==================================
产生Excel报表

如您所见,我们没有对已经测试过的ReportingService进行任何更改。我们只是添加了新类"ExcelReportingStrategy"这使我们能够生成Excel报告。

那’关于竞彩篮球分析中的开放式封闭设计原则。

分享这个

作者

关注作者

相关文章

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


让’s be Friends

©2020 爪哇 2博客