當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
使用Spring工厂模式管理多个类实现同一个接口
生活随笔
收集整理的這篇文章主要介紹了
使用Spring工厂模式管理多个类实现同一个接口
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近小白在看 Spring IOC 和 AOP 源碼時發現 Spring 中有很多類都實現了同一個接口,像下面這種
public interface AopProxy {Object getProxy();Object getProxy(@Nullable ClassLoader classLoader); } 復制代碼final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializable {private static final long serialVersionUID = 5531744639992436476L;// 略... } 復制代碼("serial") class CglibAopProxy implements AopProxy, Serializable {// 略... } 復制代碼此種方式是如何實現的小白還不清楚,但肯定知道是 Spring 框架搞的鬼;所以小白就在網上找到了一圈、自己能看懂的一段代碼,然后照著網上的寫法,自己寫了一個關于排序算法的調用,以供參考:
一、枚舉排序類型
/*** @author zhugu* @version 1.0* @Date 2019/4/17 14:51* @Description 排序類型*/ public enum SortType {SELECTION,BUBBLE,INSERT, } 復制代碼二、編寫一個排序接口,調用入口
/*** @author zhugu* @version 1.0* @Date 2019/4/17 14:15* @Description 排序*/ public interface Sort {SortType getSortType();int[] sorting(int[] sourceArray); } 復制代碼三、編寫幾個常見的排序算法
(1)、冒泡排序
(2)、插入排序
/*** @author zhugu* @version 1.0* @Date 2019/4/17 14:17* @Description 插入排序*/ public class InsertSort implements Sort {public SortType getSortType() {return SortType.INSERT;}public int[] sorting(int[] sourceArray) {// 7, 2, 4, 6, 3, 9, 1int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);printArr(arr);// 從下標為1的元素開始選擇合適的位置插入,因為下標為0的只有一個元素,默認是有序的for (int i = 1; i < arr.length; i++) {// 記錄要插入的數據int temp = arr[i], j = i;// 從已經排序的序列最右邊的開始比較,找到比其小的數while (j > 0 && temp < arr[j - 1]) {arr[j] = arr[j - 1];j--;}// 存在比其小的數,插入if (j != i) {arr[j] = temp;}printArr(arr);}return arr;}private void printArr(int[] arr) {for (int x = 0; x < arr.length; x++) {if (x != arr.length - 1) {System.out.print(arr[x] + ", ");} else {System.out.println(arr[x]);}}} } 復制代碼(3)、選擇排序
/*** @author zhugu* @version 1.0* @Date 2019/4/17 14:16* @Description 選擇排序*/ public class SelectionSort implements Sort {public SortType getSortType() {return SortType.SELECTION;}public int[] sorting(int[] sourceArray) {int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);// 總共要經過 N-1 輪比較for (int i = 0; i < arr.length - 1; i++) {int min = i;// 每輪需要比較的次數 N-ifor (int j = i + 1; j < arr.length; j++) {if (arr[j] < arr[min]) {// 記錄目前能找到的最小值元素的下標min = j;}}// 將找到的最小值和i位置所在的值進行交換if (i != min) {int temp = arr[i];arr[i] = arr[min];arr[min] = temp;}}return arr;} } 復制代碼四、排序工廠,實現 ApplicationContextAware 接口
/*** @author zhugu* @version 1.0* @Date 2019/4/17 14:56* @Description 排序工廠*/ public class SortFactory implements ApplicationContextAware {private static Map<SortType, Sort> sortBeanMap = new ConcurrentHashMap<>(16);public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {Map<String, Sort> map = applicationContext.getBeansOfType(Sort.class);map.forEach((key, value) -> sortBeanMap.put(value.getSortType(), value));}public int[] sorting(SortType sortType, int[] sourceArray) {Sort sort = sortBeanMap.get(sortType);return sort.sorting(sourceArray);} } 復制代碼五、測試
public class SortController {private final SortFactory sortFactory;public SortController(SortFactory sortFactory) {this.sortFactory = sortFactory;}(value = "factory/sort")public Object sortFactory(SortType sortType, int[] sourceArr) {return sortFactory.sorting(sortType, sourceArr);} } 復制代碼響應參數:
[1,4,6,6,46,46,54,54,65,65,74,85,465,879,9874 ] 復制代碼轉載于:https://juejin.im/post/5cb6d497f265da03a97ae269
總結
以上是生活随笔為你收集整理的使用Spring工厂模式管理多个类实现同一个接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL-33 创建一个actor表,包含
- 下一篇: 强化学习算法Policy Gradien