美文网首页程序员Android知识Android开发
设计模式小练手——策略模式

设计模式小练手——策略模式

作者: CSU_IceLee | 来源:发表于2017-03-29 15:17 被阅读75次

    策略模式

    问题

    最近买了一本书,叫做《设计模式之禅》,读起来还是很顺畅的,跟着例子敲一遍也没问题,可是偏偏到自己真正做一个小项目的时候,就不知道该怎么用了~
    记得在去年寒假的时候,在开发Android程序时,学了一个自定义Toast,然后在BaseActivity中写了一个方法,简化Toast的调用,即原来是这样写的:Toast.makeText("XXXX").show(); ,改成了这样:show("XXXX")。所以我想把所有的Activity中的Toast都替换掉,于是乎想到了用一个程序才帮我做这些重复性的工作。可谁知道这小程序一写就是两个多小时!

    处理过程

    我直接使用了一个Java类,在main方法里面进行了文件的读取,然后进行字符串的替换,最后输出到新文件。
    过程还是很简单的,代码也很容易,就是一个字符串的替换而已。问题是当时读入的中文是乱码,搞了好久,然后正则表达式又不怎么会,又搞了好久......
    后来仔细一回想,这样写代码实在是一个差劲的程序猿,没有一点面向对象的思想,下次要改一个方式去替换字符串,岂不是要改很多地方???
    刚好看到了这个设计模式,想想这个用策略模式来优化结构还是非常不错的。

    策略模式

    1. 概念

    策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

    1. 通用类图


      策略模式通用类图
    2. 实际类图


      实际类图
    3. 类图说明
      首先定义了一个IStrategy接口,提供了replace方法。然后具体的替换策略就是一个个的子类(ToastReplaceStrategy),在Replacer类中,我们持有IStrategy的对象的引用,在客户端创建时需要传进来一个具体的IStrategy对象,然后调用replace方法进行字符串的替换。
      由于String类型的字符串是不可变的,所以我们必须返回一个新的字符串。

    4. 简单的代码:
      IStrategy接口:

    public interface IStrategy {
        String replace(String s);
    }
    

    实现子类:

    public class PlaceToastStrategy implements IStrategy {
        @Override
        public String replace(String s) {
            //处理相关替换逻辑 代码太长久不贴出来了
            return s;
        }
    }
    

    Replacer交互类:

    public class Replacer {
        IStrategy strategy;
        public Replacer(IStrategy strategy){
            this.strategy = strategy;
        }
        public String place(String s){
            return strategy.replace(s);
        }
    }
    

    客户端:

    pulic class Client{
        public static  void main(String[] args) throws IOException {
                //省略了从文件读入字符串的过程  保存在s中
                Replacer replacer = new Replacer(new PlaceToastStrategy());
                s = replacer.place(s);
                //然后写入新文件即可
            }
        }
    }
    
    1. 优点
      策略模式的优点就是更新策略的时候,无需改动现有的代码,只需要增加一个具体的策略类就可以了,然后在客户端进行使用。
      所以下次要替换别的字符串时,只需要新增一个替换策略类就可以了。

    结语

    设计模式这种东西,虽然在设计的时候很少用到,但是当发现类的结构十分不恰当时,便可以考虑使用各种设计模式来优化代码与结构。所以平时还是多了解一下设计模式,到需要用的时候才能有的放矢。
    以后在项目中用到了设计模式时,我会以今天这篇文章的形式记录下来,所以一篇文章的时间可能比较久。如果想及时看到这类文章,可以关注我哟~

    相关文章

      网友评论

        本文标题:设计模式小练手——策略模式

        本文链接:https://www.haomeiwen.com/subject/rlweottx.html