从例子入手了解设计模式 -- Command

今天听了一天的课, 对老师讲的软件设计有了一定的了解。

 

开发的代码不变, 而需求却在一直变化,如何在软件设计初期就考虑包含这些变化, 或者重构代码为以后的扩展提供更多的便利。

 

切入点从一个例子开始,  

 

1> 将 Class A 与 Class B 交互, 将“ABC”转化为小写方式的"abc".

这里我们或许写一个简单的方法就可以实现了。

 

 

2> 需求增加, 我们要将"abc" 转化成 "ABC".

我们或许在上面的方法里面加个else.

 

3> 需求继续增加, 我们要将字符串反转。

我们再增加一个方法? 还是在现有方法基础上做修改。

 

 

4> 需求继续增加, 我们要将传入的数字输出。

在现有的基础上我们再增加if&else 分支么?

 

这时候, 我们为了消除程序的分支复杂度, 引入了Command模式。

 

 

这里我们将每种需求做成一种Command的实现, 在需求增加的情况下, 只需要增加新的实现代码即可以实现。

 

 

public class CatalogApp {

    public static final String REVERSE_HANDLER = "reverse";
    public static final String UPPERCASE_HANDLER = "uppercase";
    
    private Map<String, Handler> handlers;
    
    public CatalogApp() {
        createHandlers();
    }
    
    public void createHandlers() {
        handlers = new HashMap<String, Handler>();
        handlers.put(REVERSE_HANDLER, new ReverseHandler(this));
        handlers.put(UPPERCASE_HANDLER, new UpperCaseHandler(this));
    }
    
    public HandlerResponse executeActionAndGetResponse(String handlerName, Map parameters) {
        Handler handler = lookupHandlerBy(handlerName);
        return handler.execute(parameters);
    }
    
    private Handler lookupHandlerBy(String handlerName){
        return handlers.get(handlerName);
    }
    
}

 

 

public class LowerCaseHandler extends Handler {

    public LowerCaseHandler(CatalogApp catalogApp) {
        super(catalogApp);
    }
    
    public HandlerResponse execute(Map parameters) {
        return null;
    }
}
 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值