1. 程式人生 > 實用技巧 >工廠+模板方法設計模式

工廠+模板方法設計模式

有時後經常需要寫很多的if判斷語句,導致了程式碼的十分冗餘,可讀性不高,下面以工廠設計模式+策略設計模式提供一種可替代的寫法,簡化程式碼

工廠設計模式:Factory2

import com.google.common.collect.Maps;
import org.springframework.util.StringUtils;

import java.util.Map;

/**
 * 工廠設計模式
 */
public class Factory2 {
    private static Map<String, AbstractHandler> strategyMap = Maps.newHashMap();

    
public static AbstractHandler getInvokeStrategy(String str) { return strategyMap.get(str); } public static void register(String str, AbstractHandler handler) { if (StringUtils.isEmpty(str) || null == handler) { return; } strategyMap.put(str, handler); } }

模板方法設計模式 AbstractHandler

/**
 * 模板方法設計模式
 */
public abstract class AbstractHandler implements InitializingBean {

    public void AAA(String name) {
        throw new UnsupportedOperationException();
    }

    public String BBB(String name) {
        throw new UnsupportedOperationException();
    }
}

模板方式:LiSiHandler2

@Component
public class LiSiHandler2 extends AbstractHandler {

    @Override
    public String BBB(String name) {
        // 業務邏輯B
        return "李四完成任務B";
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Factory2.register("李四", this);
    }
}

模板方式:TianQiHandler2

import org.springframework.stereotype.Component;

@Component
public class TianQiHandler2 extends AbstractHandler {

    @Override
    public void AAA(String name) {
        // 業務邏輯A
        System.out.println("田七完成任務A");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Factory2.register("田七", this);
    }
}

模板方式:WangWuHandler2

import org.springframework.stereotype.Component;

@Component
public class WangWuHandler2 extends AbstractHandler {

    @Override
    public String BBB(String name) {
        // 業務邏輯B
        return "王五完成任務B";
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Factory2.register("王五", this);
    }
}