工厂模式和策略模式的区别。 策略模式的实现代码: 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类进行调用的。