工厂模式和策略模式

工厂模式和策略模式的区别。 策略模式的实现代码: 1、新建接口

public interface RecordHandler {

    void saveLocal(Object resource);

    void removeLocal();

    HandleType getType();

}
复制代码

2、编写接口的实现类:

public class Demo2 implements RecordHandler{

    @Override
    public void saveLocal(Object resource) {
        System.out.println("把Demo2的数据保存到DB");
    }

    @Override
    public void removeLocal() {
        System.out.println("移除Demo2的数据");
    }

    @Override
    public HandleType getType() {
        return HandleType.DEMO2;
    }

}
复制代码
public class Demo1 implements RecordHandler{

    @Override
    public void saveLocal(Object resource) {
        System.out.println("把Demo1的数据保存到DB");
    }

    @Override
    public void removeLocal() {
        System.out.println("移除Demo1的数据");
    }

    @Override
    public HandleType getType() {
        return HandleType.DEMO1;
    }
}
复制代码

3、新建策略或者Manager类

public class RecordHandleManager {

    //定义策略的工厂类
    public Map<String, RecordHandler> maps = new HashMap<>();


    public void setMaps(List<RecordHandler> recordHandlerList ){
        if (recordHandlerList == null || recordHandlerList.size() <= 0 ){
            System.out.println("failed recordHandle");
        }
        recordHandlerList.stream().forEach(P ->

                maps.put(P.getType().getType(),P));

    }


    public void saveLocal(HandleType type,Object obj){
        RecordHandler recordHandler = maps.get(type.getType());
        recordHandler.saveLocal(obj);
    }

    public void removeLocal(HandleType type){
        RecordHandler recordHandler = maps.get(type.getType());
        recordHandler.removeLocal();
    }

}
复制代码

4、调用

RecordHandleManager recordHandlerManager = new RecordHandleManager();
recordHandlerManager.setMaps(Arrays.asList(new Demo(),new Demo1(),new Demo2()));
recordHandlerManager.saveLocal(HandleType.DEMO2,new Object());
复制代码

工厂模式的实现 1、新建接口类

public interface FactoryPhone {


    void makeCar();
}
复制代码

2、新建接口的实现类

public class Aodi implements FactoryPhone{

    @Override
    public void makeCar() {
        System.out.println("生产奥迪汽车");
    }
}
```
public class TModel implements FactoryPhone{


    @Override
    public void makeCar() {
        System.out.println("生产Tmodel汽车");
    }
}
```
复制代码

3、新建Manager

public class CarManager {

    public FactoryPhone reject(String name){
        if ("奥迪".equalsIgnoreCase(name)){
            return new Aodi();
        }else{
            return new TModel();
        }
    }

}
复制代码

4、调用

  public static void main(String[] args) {
//
//        RecordHandleManager recordHandlerManager = new RecordHandleManager();
//        recordHandlerManager.setMaps(Arrays.asList(new Demo(),new Demo1(),new Demo2()));
//        recordHandlerManager.saveLocal(HandleType.DEMO2,new Object());


        CarManager carManager = new CarManager();
        FactoryPhone factoryPhone = carManager.reject("奥迪");
        factoryPhone.makeCar();
    }
复制代码

可以明显的看到。调用的时候,返回的是接口的实现类,而策略模式是通过Manager类进行调用的。

猜你喜欢

转载自juejin.im/post/7040726434184183845