日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一线二线三线在线观看 | 91中文字幕永久在线 | av乱码| 中文久久乱码一区二区 | 黄色一级带 | 激情影音 | 国产福利社 | 少妇一级视频 | 少妇精品视频一区二区 | 在线婷婷| 国产视频一二三区 | 中文字幕av一区二区三区人妻少妇 | 成人性做爰aaa片免费 | 国产美女永久无遮挡 | 中文字幕网站在线观看 | 伊人情人综合 | 国产99久久久 | 91网站观看| 欧美日韩在线播放视频 | 扒下小娇妻的内裤打屁股 | 中文字幕人妻熟女人妻a片 麻豆91视频 | 欧美中文字幕在线 | 中文字幕视频在线 | 伊人天堂av | 一级小毛片 | 亚洲第一页色 | 亚洲成人精品一区二区 | 精品人妻一区二区三区浪潮在线 | 日韩av综合在线 | 成人在线视频播放 | 极品白嫩丰满美女无套 | 国产精品亚洲а∨天堂免在线 | 午夜精品一区二区三区在线观看 | 欧美视频一区二区三区 | www婷婷av久久久影片 | 深夜福利视频在线 | 清纯唯美亚洲 | 精品无码久久久久久久 | 亚洲精品国产99 | 伊人超碰 | 国产一区二区黄色 | 成人区人妻精品一区二区不卡视频 | 久久天天躁狠狠躁夜夜av | 精品综合久久久久 | 国产在线观看黄 | 日本理伦片午夜理伦片 | 久久久18 | 国产精品亚洲二区 | 国产chinese男男网站大全 | 一区不卡在线观看 | 亚洲色图吧 | 在线观看国产一区二区 | 久久久性 | 午夜网址 | 亚洲一级中文字幕 | 国产激情影院 | 国产在线高潮 | 波多av | 亚洲天堂一区在线 | 91精彩视频在线观看 | 欧美日韩精品在线观看视频 | 国产无套粉嫩白浆内谢 | 久久精品电影网 | 桥本有菜aⅴ一区二区三区 在线午夜电影 | 99精品乱码国产在线观看 | 亚洲国产精品电影 | 夜夜综合网 | 99久久久国产精品无码性 | 蜜乳av一区二区 | 国产精品久久久久久久久久妞妞 | 91在线观看| 麻豆网站在线观看 | 西西人体做爰大胆gogo直播 | 日韩免费一区二区三区 | 97超碰免费在线观看 | 日韩精品一区二区三区国语自制 | 一区二区三区免费毛片 | 三级4级全黄60分钟 成人自拍视频 | 白又丰满大屁股bbbbb | 亚洲日本久久 | 成人免费网站在线观看 | 少妇人妻一区 | 日本一区二区免费在线 | 日本黄色小说 | 中国精品一区二区 | 丁香花高清在线 | 一级片国产| 求欧美精品网址 | 成人1区 | 日日噜噜噜夜夜爽爽狠狠 | 久久大胆人体 | 乱老熟女一区二区三区 | 97夜夜操| 91精品国产色综合久久不卡蜜臀 | 日本黄色网页 | 日本一区不卡在线 | 国产婷婷色综合av蜜臀av | 亚洲综合社区 | 色综合久久久久久 |