摘要:作用不改變原類的代碼,而增強(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
馬上就要開始啦這次共組織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/...
摘要:以下知識點(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...
摘要:以下知識點(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...
閱讀 1225·2023-04-25 20:31
閱讀 3731·2021-10-14 09:42
閱讀 1502·2021-09-22 16:06
閱讀 2687·2021-09-10 10:50
閱讀 3539·2021-09-07 10:19
閱讀 1783·2019-08-30 15:53
閱讀 1181·2019-08-29 15:13
閱讀 2828·2019-08-29 13:20