• 设计模式——策略模式


    策略模式:

    将动作等变化的东西抽离出来变成行为。这样具体的不变化的事物中会有行为的接口引用,当具体调用的时候可以动态设置他的接口实现类从而动态的改变行为。

    要点:

    封装变化;多用组合,少用继承;针对接口(不单单是接口可以包含抽象类等)编程,不针对实现编程。

    类图:

    把会变化的内容取出并封装起来,以便以后可以轻易地改动或扩充部分,而不影响不需要变化的其他部分;

    Java是面向对象的语言,所以利用面向对象的思维去编写程序实现功能,重要的一点莫过于使用Java的封装和多态的概念。以下是编写的是实现排序功能的类,在排序类DataSorter中的排序的方法对于不同的场合,其排序的规则是不同的,所以将排序规则进行抽象,抽象出Comparable接口。在对不同的对象进行排序时,该对象必须继承Comparable接口,并且重写compareTo()方法,这样在对该对象进行排序时,就可以依照提供的比较规则进行排序。同样在抽象出Comparable接口之后我们会发现在重写compareTo()方法时,其中的代码也是比较固定的,这样如果有多种比较规则就会显得耦合度较高,所以我们也可以抽象出比较器comparator接口,这样就会大大提高程序的灵活性。以上便是我们解决对不同的对象进行排序的思路。

    在以上的分析中我们可以看到我们将对象比较的方法和比较的规则进行了封装和抽象,使之变成一个接口,这样在具体的实现时分别编写不同的实现,而排序方法中则不用变化,从而将对其的影响降到最低,达到了比较好的效果。

    首先编写Comparable接口:

    然后编写Comparator接口:


    编写排序类DataSorter:


    为了测试,我们编写Cat类,在Cat类中继承Comparable接口重写compareTo方法:


    编写Cat类的比较器类CatHeightComparator:


    最后是测试类Test:





  • 相关阅读:
    雪中吟
    趋中法则
    我的年龄
    使用BindingList来实现DataGridview数据源为list时的动态增删改
    Winform下调用ShowDialog()显示窗体,切记调用Dispose来释放资源
    异常详细信息: System.Web.Hosting.HostingEnvironmentException: 访问 IIS 元数据库失败 解决方法
    【原创】:WinForm使用XML动态加载多语言
    ubuntu 11.10安装java1.6(转)
    java 中判断是否为 汉字(转)
    ubuntu下的c/c++环境搭建(转)
  • 原文地址:https://www.cnblogs.com/lcqBlogs/p/2392364.html
Copyright © 2020-2023  润新知