成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

設計模式學習

RyanQ / 1720人閱讀

摘要:作用不改變原類的代碼,而增強原類對象的功能可以選擇前置,后置,環(huán)繞,異常處理增強與裝飾者模式的區(qū)別意圖的不同代理模式意在在代理中控制使用者對目標對象的訪問

設計思想:
OOP 類是做什么用的?
封裝數(shù)據(jù)和代碼
接口是做什么用的?
定義相接的口子,定義功能使用者和提供者之間的接口
為什么要有接口?
隔離變化的
抽象類是做什么的?
包含變與不變的
OOP 三大特性:封裝 繼承 多態(tài)

多態(tài)
類與類的關系
繼承 和 組合類1持有類2的實例

OO的設計原則
找出變化,分開變化和不變的
隔離,封裝變化的部分,讓其他部分不受它的影響
面向接口編程 隔離變化的方式
使用者使用接口,提供者實現(xiàn)接口。接口可以是超類
依賴倒置原則
依賴抽象,不要依賴具體類
對修改閉合,對擴展開放 隔離變化的方式
多用組合,少用繼承 靈活變化的方式
有一個 可能比是一個 更好
單一職責原則 方法設計的原則

設計模式
目的
易擴展,易維護
少改代碼,不改代碼

策略模式
促銷活動 實現(xiàn)訂單金額的計算
一般模式
@RestController
@RequestMapping("/order")
public class OrderController{

@Autowired
private OrderService orderService;

//計算訂單金額
@RequestMapping("/prepare")
public Order prepareOrder() {

    .....//業(yè)務代碼
    return this.orderService.prepareOrder(order,promotion);
}

}

@Service
public class OrderService {

public Order prepareOrder(Order order,String promotion) {
    //如何寫
    return order;
} 

}
//一般都這樣寫 代碼太多 不好維護
@Service
public class OrderService {

public Order prepareOrder(Order order,String promotion) {
    switch(promotion) {
    case "promotion-1":
            //促銷一的算法
        ...
        break;
    case "promotion-2":
            //促銷一的算法
        ...
        break;
    case "promotion-3":
            //促銷一的算法
        ...
        break;
    ......    
    }
    return order;
} 

}

//改進一下 封裝一下 單一職責
@Service
public class OrderService {

public Order prepareOrder(Order order,String promotion) {
    switch(promotion) {
    case "promotion-1":
            //促銷一的算法
        ...
        return calPromotion1(order);
    case "promotion-2":
            //促銷一的算法
        ...
        return calPromotion2(order);
    case "promotion-3":
            //促銷一的算法
        ...
        return calPromotion3(order);
    ......    
    }
    return order;
} 

private Order calPromotion(Order order) {
    System.out.println("促銷一的計算");
    return order;
}

}

//再次改進 同一行為的不同算法實現(xiàn) ,我們可以定義接口,不同的算法分別去實現(xiàn)接口
設計原則 對修改關閉 對擴展開放
策略模式 定義一系列的算法,并將每一個算法封裝起來,而且使他們可以相互替換,讓算法獨立于使用他的用戶而獨立變化
interface PromotionCalculation{

public static Order culation(order);
}
public class Promotion1Calculation implements  PromotionCalculation {
    public static Order culation(order) {
        //算法
        return order;
    }
}
public class Promotion2Calculation implements  PromotionCalculation {
    public static Order culation(order) {
        //算法
        return order;
    }

}
//再次改進
@Service
public class OrderService {

public Order prepareOrder(Order order,String promotion) {
    switch(promotion) {
    case "promotion-1":
            //促銷一的算法
        ...
       return new Promotion1Calculation().culation(order);
    case "promotion-2":
            //促銷一的算法
        ...
        return new Promotion2Calculation().culation(order);
    case "promotion-3":
            //促銷一的算法
        ...
        return new Promotion3Calculation().culation(order);
    ......    
    }
    return order;
} 

}

工廠模式
簡單工廠 : 一個工廠負責創(chuàng)建所有的實例
通過一個工廠來專門負責創(chuàng)建各種促銷計算,把變化移出來
@Component
public class PromotionCalculationFactory {

public PromotionCalculation getPromotionCalculation(String promotion) {
    switch(promotion) {
    case "promotion-1":
            //促銷一的算法
        ...
       return new Promotion1Calculation();
    case "promotion-2":
            //促銷一的算法
        ...
        return new Promotion2Calculation();
    case "promotion-3":
            //促銷一的算法
        ...
        return new Promotion3Calculation();
    ......   
    }
}

}
//現(xiàn)在的service
@Service
public class OrderService {

public Order prepareOrder(Order order,String promotion) {
@Autowired
private PromotionCalculationFactory promotionCalculationFactory;
    
public Order  prepareOrder(Order order,String promotion) {
    return promotionCalculationFactory.getPromotionCalculation(promotion).calculation(order);
    }
} 

}
//想要工廠的代碼也不要變
方式一 promotion = beanName; //getBean(); 在xml中配置
方式二 配置promotion與實現(xiàn)類對應的關系

工廠方法模式: 父類中定義工廠方法,各子類實現(xiàn)具體的實例創(chuàng)建

抽象工廠模式:定義一個工廠接口,所以具體工廠實現(xiàn)接口

裝飾者模式
以裝飾的方式,動態(tài)的將責任附加到對象上

代理模式
為其他對象提供一種代理以控制對這個對象的訪問
在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
作用:不改變原類的代碼,而增強原類對象的功能
可以選擇前置,后置,環(huán)繞,異常處理增強
與裝飾者模式的區(qū)別
意圖的不同:代理模式意在在代理中控制使用者對目標對象的訪問

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72440.html

相關文章

  • 第7期 Datawhale 組隊學習計劃

    馬上就要開始啦這次共組織15個組隊學習 涵蓋了AI領域從理論知識到動手實踐的內(nèi)容 按照下面給出的最完備學習路線分類 難度系數(shù)分為低、中、高三檔 可以按照需要參加 - 學習路線 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...

    dinfer 評論0 收藏0
  • [ 學習路線 ] 學完這些去阿里!GOGOGO

    摘要:以下知識點是前輩師兄總結基礎語義化標簽引進了一些新的標簽,特別注意等,注意的標題結構理解瀏覽器解析的過程,理解的樹形結構,及相應理解標簽在各個瀏覽器上的默認樣式代理樣式,理解中的重置樣式表的概念理解等功能性標簽理解標簽,理解文件提交過程推薦 以下知識點是前輩師兄總結 1、HTML/HTML5基礎: 1.0、語義化H5標簽1.1、H5引進了一些新的標簽,特別注意article...

    zhaochunqi 評論0 收藏0
  • [ 學習路線 ] 學完這些去阿里!GOGOGO

    摘要:以下知識點是前輩師兄總結基礎語義化標簽引進了一些新的標簽,特別注意等,注意的標題結構理解瀏覽器解析的過程,理解的樹形結構,及相應理解標簽在各個瀏覽器上的默認樣式代理樣式,理解中的重置樣式表的概念理解等功能性標簽理解標簽,理解文件提交過程推薦 以下知識點是前輩師兄總結 1、HTML/HTML5基礎: 1.0、語義化H5標簽1.1、H5引進了一些新的標簽,特別注意article...

    learn_shifeng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<