プロジェクトコードならば、大面積を減らすための戦略

リファレンスデザインパターン- Strategyパターン我々はのif-elseコードセグメントを最適化することができ、かつで春(ブーツ)、助けを借りてのApplicationContextのスキャン、コードをよりきれいにすることができます。

いくつかの単語の男、梁コードは言いました:

まず、戦略パターンの表現によれば、処理戦略を区別するためのハンドルインタフェースを作成します。

public interface ITypeHandle {
    /**
     * 不同的业务操作
     *
     * @return 对应的操作结果
     */
    String working();

    /**
     * 声明用于处理的业务(方便查看而已)
     *
     * @return 业务名称
     */
    String handleType();
}

そして、対応する作成ウェイクプロセッサおよびプロセッサ睡眠を

// 起床操作
public class WakeTypeHandle implements ITypeHandle {
    @Override
    public String working() {
        try {
            // 模拟业务操作
            Thread.sleep(100);
        } catch (Exception ex) {
            return "Wake Interrupt";
        }
        return "Wake up Wake up Wake up";
    }

    @Override
    public String handleType() {
        return "wake";
    }
}
// 睡觉操作
public class SleepTypeHandle implements ITypeHandle {
    @Override
    public String working() {
        try {
            // 模拟业务操作
            Thread.sleep(500);
        } catch (Exception ex) {
            return "Sleep Interrupt";
        }
        return "Sleep Sleep Sleep Zzzzzzzzzzzzz";
    }

    @Override
    public String handleType() {
        return "sleep";
    }
}

簡潔には、ポリシーコンテキストの動作モードは、異なるプロセッサを切り替える異なるサービスによって処理されます。春には、あなたが完了するのApplicationContextとComponentScanを利用することができます。

確立戦略工場

public class TypeHandleFactory {
    private Map<String , ITypeHandle> map;

    @Autowired
    private ApplicationContext applicationContext;

    @PostConstruct
    private void init(){
        Map<String ,ITypeHandle> beans=applicationContext.getBeansOfType(ITypeHandle.class);
        map= new HashMap<>(beans.size());
        for (ITypeHandle handle : beans.values()) {
            map.put(handle.handleType(),handle);
        }
    }
    public ITypeHandle getInstance(String type){
        return map.get(type);
    }
}

ここで初期化は、注射のApplicationContextが完了した後に行うので、追加する必要があります@PostConstructコメントを。春では、クラス注釈の一次配列が行われます构造方法=>@Autowired=>@PostConstruct=>@PreDestroy=>销毁また、あなたは戦略の工場と2つのハンドラの観点で追加する必要が@Componentメモやで@ComponentScanスキャン。

ビジネス層をシミュレートするために、サービスクラスを追加します:

@Service
public class MainServiceImpl {
    @Autowired
    private TypeHandleFactory factory ;
    @Override
    public String work(String type){
        ITypeHandle handler = factory.getInstance(type);
        return handler.working();
    }
}

これまでのところ、我々は春に構築するための戦略モードを完了しましたあなたは、テストクラスのテストを書くことができます。

@SpringBootTest
class MainServiceImplTest {
    @Autowired
    private MainServiceImpl service;
    @Test
    void work(){
        String typeA="wake";
        String typeB="sleep";
        System.out.println(service.work(typeA));
        System.out.println(service.work(typeB));
    }
}

ログは、として印刷しました:

Wake up Wake up Wake up
Sleep Sleep Sleep Zzzzzzzzzzzzz

Strategyパターンは、春の最適化に完成しました。

おすすめ

転載: www.cnblogs.com/ZoraZora59/p/12422967.html