首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring与工场模式的运用

2013-06-26 
Spring与工厂模式的运用2.2. ? 代码示例形成代码之后大概会这么写:?publicclass Example1 {? ?publicstati

Spring与工厂模式的运用


2.2. ? 代码示例

形成代码之后大概会这么写:

?

publicclass Example1 {

? ?publicstaticvoid main(String[] args) {

? ? ? String specialParam = args[0];// 这是一个特定的参数

?

? ? ? Object[] param1 = new Object[] {};

? ? ? Object[] param2 = new Object[] {};

? ? ? Object[] param3 = new Object[] {};

? ? ? // ………… 以上是一堆常见、有规则的其他参数

?

? ? ? if ("CanShu1".equals(specialParam)) {

?

? ? ? ? ? // ………… 一堆冗长的程序

?

? ? ? } elseif ("CanShu2".equals(specialParam)) {

? ? ? ? ? // ………… 又一堆冗长的程序

?

? ? ? } elseif ("CanShu3".equals(specialParam)) {

?

? ? ? ? ? // ………… 再一堆冗长的程序

?

? ? ? } else {

?

? ? ? ? ? // ………… 其他默认的冗长的程序

? ? ? }

? ?}

}

?


2.3. ? 优缺点分析

? ?从这个示例的角度,代码挺清晰的,但是到了实际应用中,可能就会有数十套逻辑,可能会有长达数千行代码,可能会绕晕很多人。


3. ? ? ? 一个常见的不好的修改方式


3.1. ? 场景简介与代码示例

如下是很常见的一个修改方式,将不同的流程提炼出独立的方法,让逻辑判断的位置独立出来。

publicclass Example2 {

?

? ?publicstaticvoid main(String[] args) {

? ? ? String specialParam = args[0];// 这是一个特定的参数

?

? ? ? Object[] param1 = new Object[] {};

? ? ? Object[] param2 = new Object[] {};

? ? ? Object[] param3 = new Object[] {};

? ? ? // ………… 以上是一堆常见、有规则的其他参数

?

? ? ? // 提炼独立方法

? ? ? if ("CanShu1".equals(specialParam)) {

? ? ? ? ? handleCanShu1(param1, param2, ?param3);

? ? ? } elseif ("CanShu2".equals(specialParam)) {

? ? ? ? ? handleCanShu2(param1, ?param2, param3);

? ? ? } elseif ("CanShu3".equals(specialParam)) {

? ? ? ? ? handleCanShu3(param1, ?param2, param3);

? ? ? } else {

? ? ? ? ? handleDefault(param1, ?param2, param3);

? ? ? }

? ?}

?

? ?publicstaticvoid handleCanShu1(Object[] ?param1, Object[] param2,

? ? ? ? ? Object[] param3) {

? ? ? // ………… 一堆冗长的程序

? ?}

?

? ?publicstaticvoid handleCanShu2(Object[] ?param1, Object[] param2,

? ? ? ? ? Object[] param3) {

? ? ? // ………… 又一堆冗长的程序

? ?}

?

? ?publicstaticvoid handleCanShu3(Object[] ?param1, Object[] param2,

? ? ? ? ? Object[] param3) {

? ? ? // ………… 再一堆冗长的程序

? ?}

?

? ?publicstaticvoid handleDefault(Object[] ?param1, Object[] param2,

? ? ? ? ? Object[] param3) {

? ? ? // ………… 其他默认的冗长的程序

? ?}

}


3.2. ? 优缺点分析

相信各位维护的旧项目里面不会缺乏此类代码。

? ? ? ? 从维护的角度来看:

?


4.2. ? 代码示例

? ? ? ? 以下是一套简单的实现代码:

publicclass Example3 {

? ?publicstaticvoid main(String[] args) {

? ? ? String specialParam = args[0];// 这是一个特定的参数

?

? ? ? Object[] param1 = new Object[] {};

? ? ? Object[] param2 = new Object[] {};

? ? ? Object[] param3 = new Object[] {};

? ? ? // ………… 以上是一堆常见、有规则的其他参数

? ? ? Example3Service service = ?Example3Factory.getService(specialParam);

? ? ? service.run(param1, param2, param3);

? ? ?

? ?}

}

调用其实是很简单的。

?

package com.test;

/**

* 提炼出工厂和接口

*/

publicclass Example3Factory {

? ?publicstatic Example3Service ?getService(String specialParam) {

? ? ? if ("CanShu1".equals(specialParam)) {

? ? ? ? ? returnnew Example3ServiceCanShu1Impl();

? ? ? } elseif ("CanShu2".equals(specialParam)) {

? ? ? ? ? returnnew Example3ServiceCanShu2Impl();

? ? ? } elseif ("CanShu3".equals(specialParam)) {

? ? ? ? ? returnnew Example3ServiceCanShu3Impl();

? ? ? } else {

? ? ? ? ? returnnew Example3ServiceDefaultImpl();

? ? ? }

? ?}

}

? ? ? ? 工厂类可以简单的如例子中写死,也可以写成collection形式,然后进行注册。

?

package com.test;

/**

* 提炼出工厂和接口

*/

publicinterface Example3Service {

? ?publicvoid run(Object[] param1, ?Object[] param2, Object[] param3);

}

?

? ? ? ? 接口神马的最简单了,以下就是接口实现:

package com.test;

?

publicclass Example3ServiceCanShu1Impl implements Example3Service ?{

? ?publicvoid run(Object[] param1, ?Object[] param2, Object[] param3) {

? ? ? // ………… 一堆冗长的程序

? ?}

}

package com.test;

?

publicclass Example3ServiceCanShu2Impl implements Example3Service ?{

? ?publicvoid run(Object[] param1, ?Object[] param2, Object[] param3) {

? ? ? // ………… 又一堆冗长的程序

? ?}

}

package com.test;

?

publicclass Example3ServiceCanShu3Impl implements Example3Service ?{

? ?publicvoid run(Object[] param1, ?Object[] param2, Object[] param3) {

? ? ? // ………… 再一堆冗长的程序

? ?}

}

package com.test;

?

publicclass Example3ServiceDefaultImpl implements Example3Service ?{

? ?publicvoid run(Object[] param1, ?Object[] param2, Object[] param3) {

? ? ? // ………… 其他默认的冗长的程序

? ?}

}

?


4.3. ? 优点分析

? ? ? ? 形成工厂模式的优点很明显:

package com.test;

import java.util.Map;

import javax.annotation.Resource;

publicclass Example4 {

? ?@Resource

? ?private Map example4ServiceMap;

? ?@Resource

? ?private Example4Service example4ServiceDefaultImpl;

?

? ?publicvoid runMain(String specialParam) ?{

? ? ? Object[] param1 = new Object[] {};

? ? ? Object[] param2 = new Object[] {};

? ? ? Object[] param3 = new Object[] {};

? ? ? // ………… 以上是一堆常见、有规则的其他参数

?

? ? ? Example4Service service = example4ServiceMap.get(specialParam);

? ? ? if (service == null) {

? ? ? ? ? service = example4ServiceDefaultImpl;

? ? ? }

? ? ? service.run(param1, param2, param3);

? ?}

}

?

? ? ? ? 工厂的内容直接用Spring配置完成:

?

热点排行