策略模式

  1. 利用多态特性 根据不同的入参实现策略
public static class Sort{
  Integer sort(Integer i){}
 Integer sort(Double i){}
  Integer sort(Cat i){}
}
  • 缺点很明显,有一堆重复代码,代码冗余严重。
  1. 使用接口的方式
  • 做法是在实际需要排序的javaBean 里实现Comparator 接口或 继承Comparator抽象类即可,Comparator 是自己定义的。
  • Sort 方式接收一个Compare类型的对象即可,直接调用compare里的方法就可以了。
  • 这也是我工作中使用频率最高的一种方式。
  1. lambda 表达式方式
  • 做法是sort方法里,接收一个lambda表达式,在调用sort 方法时显式的把规则传进去。

工厂模式

  • 任何返回对象的方法和类都可以叫做工厂。

抽象工厂

public class Main {
    interface Moveable{
        void go();
    }
    public static class Car implements Moveable{
        @Override
        public void go() {
            System.out.println("Car go wuwuwuuwuw");
        }
    }
    public static class Flight implements Moveable{
        @Override
        public void go() {
            System.out.println("飞机起飞");
        }
    }
    public static class MoveableFactory{
        public static Moveable createMoveable(String type) throws Exception {
            // 公共逻辑 dosomething();
            if(type.equals("car")){
                return new Car();
            }else if(type.equals("flight")){
                return new Flight();
            }else{
                throw new Exception("不匹配的工厂");
            }
        }
    }

    public static void main(String[] args) throws Exception {
        MoveableFactory.createMoveable("car");
    }
}
  • 上述声明了交通工具接口
  • 不同的交通工具都实现了这个接口
  • 根据创建交通工具里的内容返回不同的工厂。这个参数可以是字符串,class,枚举值 等等。

模版模式

  • 和策略模式很像 只不过模版模式往往是一个抽象类,并且存在不少于一个的方法,部分方法存在默认的实现,我们可以继承这个模版方法,并重写模版方法里的部分方法,以实现更灵活的代码。

  • 其实我觉得策略模式/模版模式 和工厂模式是两个打配合的设计模式。
  • 传递不同的策略值,返回不用的工厂类。这些工厂类实现/继承 同一个抽象类或接口,调用这些实现类不同的实现操作。
  • 这也是工作中使用了较多的设计模式之一。