如何恰当的使用设计模式,使业务隔离更容易扩展

场景:(1)商品购买的支付结果页,不同的业务结果页展示的一样(2)商品核销的结果页,不同的核销场景有不同的展示(3)退款结果页,不同的场景有不同的退款结果页(4)一个系统可以处理不同的消息,但是对于对于不同的消息,可以使用扩展的方式进行处理。

可以使用策略设计模式进行处理

package spi;

/**
 * 订单模型类
 */
public class OrderModelInfo {
}
package spi;


import java.util.Optional;

public interface Provider {

    /**
     * 是否可以处理
     * @param orderModelInfo
     * @return
     */
  public  boolean canHandle(OrderModelInfo orderModelInfo);

    /**
     * 返回处理结果
     * @param orderModelInfo
     * @return
     */
  public Optional handle(OrderModelInfo orderModelInfo);
}
package spi;


import java.util.Optional;

public class CartProvider implements Provider {

    @Override
    public boolean canHandle(OrderModelInfo orderModelInfo) {
        return false;
    }

    @Override
    public Optional handle(OrderModelInfo orderModelInfo) {
        return Optional.empty();
    }
}
package spi;

import model.ToString;

public class ResultInfo extends ToString {
}
package spi;

import java.util.List;
import java.util.Optional;

public class SpiService {

    //使用Spring的方式进行注入
    private List  spiProviderList;

    public  Optional  handle(OrderModelInfo orderModelInfo){
        for(Provider provider:spiProviderList){
            if(provider.canHandle(orderModelInfo)){
                return provider.handle(orderModelInfo);
            }
        }
    }
}

 

你可能感兴趣的:(java)