使用@Autowired + Map 實現策略模式
創建接口
public interface UserService {String getName();
}
創建多個類實現上面的接口
實現一
import com.boot.service.UserService;
import org.springframework.stereotype.Service;@Service("zhangsan")
public class ZhangsanUserServiceImpl implements UserService {@Overridepublic String getName() {return "My name is zhangsan.";}
}
實現二
import com.boot.service.UserService;
import org.springframework.stereotype.Service;@Service("lisi")
public class LisiUserServiceImpl implements UserService {@Overridepublic String getName() {return "Hi my name is lisi.";}
}
提供接口
@RestController
@Slf4j
public class HelloWorldController {/*** map 的key:實例名,可以自己起,也可以用默認的,默認是類名* map 的value:實例對象*/@Autowiredprivate Map<String, UserService> userServiceMap;@GetMapping("userTest")public String getName(@RequestParam String name) {UserService userService = userServiceMap.get(name);String say = userService.getName();System.out.println(say);return say;}
}
調接口
GET http://localhost:8080/userTest?name=zhangsan 結果:My name is zhangsan.
GET http://localhost:8080/userTest?name=lisi 結果:Hi my name is lisi.
說明
在實現策略模式的時候,可以直接將類名起成策略的判斷條件,這種不推薦。也可以另外維護一套策略與實現類的對應關系
紙上得來終覺淺,絕知此事要躬行。
原文鏈接: https://www.cnblogs.com/shareToAll/p/18065406