国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設(shè)計(jì)模式學(xué)習(xí)

RyanQ / 1722人閱讀

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

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

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

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

設(shè)計(jì)模式
目的
易擴(kuò)展,易維護(hù)
少改代碼,不改代碼

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

@Autowired
private OrderService orderService;

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

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

}

@Service
public class OrderService {

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

}
//一般都這樣寫 代碼太多 不好維護(hù)
@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;
} 

}

//改進(jìn)一下 封裝一下 單一職責(zé)
@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("促銷一的計(jì)算");
    return order;
}

}

//再次改進(jìn) 同一行為的不同算法實(shí)現(xiàn) ,我們可以定義接口,不同的算法分別去實(shí)現(xiàn)接口
設(shè)計(jì)原則 對修改關(guān)閉 對擴(kuò)展開放
策略模式 定義一系列的算法,并將每一個(gè)算法封裝起來,而且使他們可以相互替換,讓算法獨(dú)立于使用他的用戶而獨(dú)立變化
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;
    }

}
//再次改進(jìn)
@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;
} 

}

工廠模式
簡單工廠 : 一個(gè)工廠負(fù)責(zé)創(chuàng)建所有的實(shí)例
通過一個(gè)工廠來專門負(fù)責(zé)創(chuàng)建各種促銷計(jì)算,把變化移出來
@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與實(shí)現(xiàn)類對應(yīng)的關(guān)系

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

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

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

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

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

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

相關(guān)文章

  • 第7期 Datawhale 組隊(duì)學(xué)習(xí)計(jì)劃

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

    dinfer 評論0 收藏0
  • [ 學(xué)習(xí)路線 ] 學(xué)完這些去阿里!GOGOGO

    摘要:以下知識點(diǎn)是前輩師兄總結(jié)基礎(chǔ)語義化標(biāo)簽引進(jìn)了一些新的標(biāo)簽,特別注意等,注意的標(biāo)題結(jié)構(gòu)理解瀏覽器解析的過程,理解的樹形結(jié)構(gòu),及相應(yīng)理解標(biāo)簽在各個(gè)瀏覽器上的默認(rèn)樣式代理樣式,理解中的重置樣式表的概念理解等功能性標(biāo)簽理解標(biāo)簽,理解文件提交過程推薦 以下知識點(diǎn)是前輩師兄總結(jié) 1、HTML/HTML5基礎(chǔ): 1.0、語義化H5標(biāo)簽1.1、H5引進(jìn)了一些新的標(biāo)簽,特別注意article...

    zhaochunqi 評論0 收藏0
  • [ 學(xué)習(xí)路線 ] 學(xué)完這些去阿里!GOGOGO

    摘要:以下知識點(diǎn)是前輩師兄總結(jié)基礎(chǔ)語義化標(biāo)簽引進(jìn)了一些新的標(biāo)簽,特別注意等,注意的標(biāo)題結(jié)構(gòu)理解瀏覽器解析的過程,理解的樹形結(jié)構(gòu),及相應(yīng)理解標(biāo)簽在各個(gè)瀏覽器上的默認(rèn)樣式代理樣式,理解中的重置樣式表的概念理解等功能性標(biāo)簽理解標(biāo)簽,理解文件提交過程推薦 以下知識點(diǎn)是前輩師兄總結(jié) 1、HTML/HTML5基礎(chǔ): 1.0、語義化H5標(biāo)簽1.1、H5引進(jìn)了一些新的標(biāo)簽,特別注意article...

    learn_shifeng 評論0 收藏0

發(fā)表評論

0條評論

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