工厂模式和策略模式的区别。
正文策略模式的实现代码:
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 Mapmaps = 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类进行调用的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)