栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一文弄懂工厂模式和策略模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一文弄懂工厂模式和策略模式

前言

工厂模式和策略模式的区别。

正文

策略模式的实现代码:

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 maps = new HashMap<>();


    public void setMaps(List 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类进行调用的。


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号