策略模式
- 利用多态特性 根据不同的入参实现策略
public static class Sort{
Integer sort(Integer i){}
Integer sort(Double i){}
Integer sort(Cat i){}
}
- 使用接口的方式
- 做法是在实际需要排序的javaBean 里实现Comparator 接口或 继承Comparator抽象类即可,Comparator 是自己定义的。
- Sort 方式接收一个Compare类型的对象即可,直接调用compare里的方法就可以了。
- 这也是我工作中使用频率最高的一种方式。
- 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,枚举值 等等。
模版模式
- 和策略模式很像 只不过模版模式往往是一个抽象类,并且存在不少于一个的方法,部分方法存在默认的实现,我们可以继承这个模版方法,并重写模版方法里的部分方法,以实现更灵活的代码。
- 其实我觉得策略模式/模版模式 和工厂模式是两个打配合的设计模式。
- 传递不同的策略值,返回不用的工厂类。这些工厂类实现/继承 同一个抽象类或接口,调用这些实现类不同的实现操作。
- 这也是工作中使用了较多的设计模式之一。