日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

朝着理想坚实迈进_坚实原则:开放/封闭原则

發(fā)布時(shí)間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 朝着理想坚实迈进_坚实原则:开放/封闭原则 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

朝著理想堅(jiān)實(shí)邁進(jìn)

先前我們討論了單一責(zé)任原則。 關(guān)于實(shí)體原則首字母縮寫, 打開/關(guān)閉原則是該行中的第二個(gè)原則。

“軟件實(shí)體(類,模塊,功能等)應(yīng)打開以進(jìn)行擴(kuò)展,但應(yīng)關(guān)閉以進(jìn)行修改”

通過采用該原理,目標(biāo)是在不修改其源代碼的情況下擴(kuò)展模塊的行為。

想象一下對(duì)我們的一種產(chǎn)品應(yīng)用折扣的情況。 折扣服務(wù)將應(yīng)用指定的折扣并返還??折扣價(jià)。

目前,我們的系統(tǒng)只有一種折扣適用于所有成年人。

package com.gkatzioura.solid.ocp;import java.math.BigDecimal; import java.math.RoundingMode;public class Discount {public BigDecimal apply(BigDecimal price) {BigDecimal percent = new BigDecimal("0.10");BigDecimal discount = price.multiply(percent);return price.subtract(discount.setScale(2, RoundingMode.HALF_UP));} }

折扣服務(wù)應(yīng)將此折扣應(yīng)用于給出的價(jià)格。

package com.gkatzioura.solid.ocp;import java.math.BigDecimal;public class DiscountService {public BigDecimal applyDiscounts(BigDecimal price,Discount discount) {BigDecimal discountPrice = price.add(BigDecimal.ZERO);discountPrice = discount.apply(discountPrice);return discountPrice;} }

但是,我們公司希望為老年人提供折扣,因此我們有老年人折扣。

package com.gkatzioura.solid.ocp;import java.math.BigDecimal; import java.math.RoundingMode;public class SeniorDiscount {public BigDecimal apply(BigDecimal price) {BigDecimal percent = new BigDecimal("0.20");BigDecimal discount = price.multiply(percent);return price.subtract(discount.setScale(2, RoundingMode.HALF_UP));} }

折扣服務(wù)使事情變得有些復(fù)雜,因?yàn)樵摲?wù)必須同時(shí)應(yīng)用成人折扣和老年人折扣。

package com.gkatzioura.solid.ocp;import java.math.BigDecimal;public class DiscountService {public BigDecimal applyDiscounts(BigDecimal price,Discount discount) {BigDecimal discountPrice = price.add(BigDecimal.ZERO);discountPrice = discount.apply(discountPrice);return discountPrice;}public BigDecimal applySeniorDiscount(BigDecimal price,SeniorDiscount discount) {BigDecimal discountPrice = price.add(BigDecimal.ZERO);discountPrice = discount.apply(discountPrice);return discountPrice;}}

通過這樣做,我們修改了折扣服務(wù)源代碼以擴(kuò)展其行為。 同樣,對(duì)于銷售部門可能提出的每一種不同的折扣,折扣服務(wù)也會(huì)獲得額外的方法。

為了遵循開放/封閉原則,我們將創(chuàng)建一個(gè)折扣界面。

package com.gkatzioura.solid.ocp;import java.math.BigDecimal;public interface Discount {BigDecimal apply(BigDecimal price); }

默認(rèn)折扣將重命名為AdultDiscount并實(shí)現(xiàn)折扣界面。

package com.gkatzioura.solid.ocp;import java.math.BigDecimal; import java.math.RoundingMode;public class AdultDiscount implements Discount {@Overridepublic BigDecimal apply(BigDecimal price) {BigDecimal percent = new BigDecimal("0.10");BigDecimal discount = price.multiply(percent);return price.subtract(discount.setScale(2, RoundingMode.HALF_UP));} }

SeniorDiscount也將實(shí)現(xiàn)Discount接口。

package com.gkatzioura.solid.ocp;import java.math.BigDecimal; import java.math.RoundingMode;public class SeniorDiscount implements Discount {@Overridepublic BigDecimal apply(BigDecimal price) {BigDecimal percent = new BigDecimal("0.20");BigDecimal discount = price.multiply(percent);return price.subtract(discount.setScale(2, RoundingMode.HALF_UP));} }

最后但并非最不重要的一點(diǎn)是,我們將對(duì)DiscountService進(jìn)行重構(gòu),以便基于Discount接口應(yīng)用折扣。

package com.gkatzioura.solid.ocp;import java.math.BigDecimal;public class DiscountService {public BigDecimal applyDiscounts(BigDecimal price,Discount[] discounts) {BigDecimal discountPrice = price.add(BigDecimal.ZERO);for(Discount discount:discounts) {discountPrice = discount.apply(discountPrice);}return discountPrice;} }

通過這種方式,折扣服務(wù)將能夠應(yīng)用不同的折扣而無(wú)需更改其源代碼。

可以對(duì)折扣應(yīng)用相同的原理。
假設(shè)我們希望有一個(gè)基本折扣可以在應(yīng)用折扣時(shí)額外應(yīng)用。

package com.gkatzioura.solid.ocp;import java.math.BigDecimal; import java.math.RoundingMode;public abstract class BasicDiscount implements Discount {@Overridepublic BigDecimal apply(BigDecimal price) {BigDecimal percent = new BigDecimal("0.01");BigDecimal discount = price.multiply(percent);return price.subtract(discount.setScale(2, RoundingMode.HALF_UP));} }

通過擴(kuò)展BasicDiscount類,我們可以在BasicDiscount的行為上獲得更多折扣,并且還可以在不修改BasicDiscount源代碼的情況下擴(kuò)展此行為。

您可以在github上找到源代碼。 下一個(gè)原理是liskov替換原理。

另外,我還編寫了備忘單,其中包含有關(guān)扎實(shí)原則的摘要。
在鏈接中注冊(cè)以接收它。

翻譯自: https://www.javacodegeeks.com/2018/02/solid-principles-open-closed-principle.html

朝著理想堅(jiān)實(shí)邁進(jìn)

總結(jié)

以上是生活随笔為你收集整理的朝着理想坚实迈进_坚实原则:开放/封闭原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。