国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式(三):開(kāi)放封閉原則(詳解)

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式(三):開(kāi)放封閉原則(詳解)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。



前言

本博主將用CSDN記錄軟件開(kāi)發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識(shí),有興趣的小伙伴可以關(guān)注博主!也許一個(gè)人獨(dú)行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠(yuǎn)!

一、介紹

  1. 開(kāi)閉原則(Open Closed Principle)是編程中最基礎(chǔ)、最重要的設(shè)計(jì)原則

  2. 一個(gè)軟件實(shí)體如類(lèi),模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放(對(duì)提供方),對(duì)修改關(guān)閉(對(duì)使用方)。用抽象構(gòu)建框架,用實(shí)現(xiàn)擴(kuò)展細(xì)節(jié)。

  3. 當(dāng)軟件需要變化時(shí),盡量通過(guò)擴(kuò)展軟件實(shí)體的行為來(lái)實(shí)現(xiàn)變化,而不是通過(guò)修改已有的代碼來(lái)實(shí)現(xiàn)變化。

  4. 編程中遵循其它原則,以及使用設(shè)計(jì)模式的目的就是遵循開(kāi)閉原則。

二、代碼演示

1、版本一

public class Ocp {

	public static void main(String[] args) {
		//使用看看存在的問(wèn)題
		GraphicEditor graphicEditor = new GraphicEditor();
		graphicEditor.drawShape(new Rectangle());
		graphicEditor.drawShape(new Circle());
		graphicEditor.drawShape(new Triangle());
	}

}

//這是一個(gè)用于繪圖的類(lèi) [使用方]
class GraphicEditor {
	//接收Shape對(duì)象,然后根據(jù)type,來(lái)繪制不同的圖形
	public void drawShape(Shape s) {
		if (s.m_type == 1)
			drawRectangle(s);
		else if (s.m_type == 2)
			drawCircle(s);
		else if (s.m_type == 3)
			drawTriangle(s);
	}

	//繪制矩形
	public void drawRectangle(Shape r) {
		System.out.println(" 繪制矩形 ");
	}

	//繪制圓形
	public void drawCircle(Shape r) {
		System.out.println(" 繪制圓形 ");
	}
	
	//繪制三角形
	public void drawTriangle(Shape r) {
		System.out.println(" 繪制三角形 ");
	}
}

//Shape類(lèi),基類(lèi)
class Shape {
	int m_type;
}

class Rectangle extends Shape {
	Rectangle() {
		super.m_type = 1;
	}
}

class Circle extends Shape {
	Circle() {
		super.m_type = 2;
	}
}

//新增畫(huà)三角形
class Triangle extends Shape {
	Triangle() {
		super.m_type = 3;
	}
}


優(yōu)缺點(diǎn):

  1. 優(yōu)點(diǎn)是比較好理解,簡(jiǎn)單易操作。

  2. 缺點(diǎn)是違反了設(shè)計(jì)模式的ocp原則,即對(duì)擴(kuò)展開(kāi)放(提供方),對(duì)修改關(guān)閉(使用方)。即當(dāng)我們給類(lèi)增加新功能的時(shí)候,盡量不修改代碼,或者盡可能少修改代碼.

  3. 比如我們這時(shí)要新增加一個(gè)圖形種類(lèi)三角形,我們需要做如下修改,修改的地方較多。

  4. 改進(jìn)的思路分析

    思路:把創(chuàng)建Shape類(lèi)做成抽象類(lèi),并提供一個(gè)抽象的draw方法,讓子類(lèi)去實(shí)現(xiàn)即可,這樣我們有新的圖形種類(lèi)時(shí),只需要讓新的圖形類(lèi)繼承Shape,并實(shí)現(xiàn)draw方法即可,

    使用方的代碼就不需要修改-> 滿(mǎn)足了開(kāi)閉原則文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-442318.html

2、版本二

public class Ocp {

	public static void main(String[] args) {
		//使用看看存在的問(wèn)題
		GraphicEditor graphicEditor = new GraphicEditor();
		graphicEditor.drawShape(new Rectangle());
		graphicEditor.drawShape(new Circle());
		graphicEditor.drawShape(new Triangle());
		graphicEditor.drawShape(new OtherGraphic());
	}

}

//這是一個(gè)用于繪圖的類(lèi) [使用方]
class GraphicEditor {
	//接收Shape對(duì)象,調(diào)用draw方法
	public void drawShape(Shape s) {
		s.draw();
	}

	
}

//Shape類(lèi),基類(lèi)
abstract class Shape {
	int m_type;
	
	public abstract void draw();//抽象方法
}

class Rectangle extends Shape {
	Rectangle() {
		super.m_type = 1;
	}

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println(" 繪制矩形 ");
	}
}

class Circle extends Shape {
	Circle() {
		super.m_type = 2;
	}
	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println(" 繪制圓形 ");
	}
}

//新增畫(huà)三角形
class Triangle extends Shape {
	Triangle() {
		super.m_type = 3;
	}
	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println(" 繪制三角形 ");
	}
}

//新增一個(gè)圖形
class OtherGraphic extends Shape {
	OtherGraphic() {
		super.m_type = 4;
	}

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println(" 繪制其它圖形 ");
	}
}

到了這里,關(guān)于設(shè)計(jì)模式(三):開(kāi)放封閉原則(詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式:里氏替換原則(詳解)

    本博主將用CSDN記錄軟件開(kāi)發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識(shí),有興趣的小伙伴可以關(guān)注博主!也許一個(gè)人獨(dú)行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠(yuǎn)! (1)引入 繼承包含這樣一層含義:父類(lèi)中凡是已經(jīng)實(shí)現(xiàn)好的方法, 實(shí)際上是在設(shè)定規(guī)范和契約 ,

    2024年02月06日
    瀏覽(16)
  • 設(shè)計(jì)模式和七大原則概述及單一職責(zé)原則詳解

    設(shè)計(jì)模式的目的 編寫(xiě)軟件過(guò)程中,程序員面臨著來(lái)自,耦合性,內(nèi)聚性以及可維護(hù)性,擴(kuò)展性,重用性等方面的挑戰(zhàn)。設(shè)計(jì)模式是為了讓程序,具有更好的 1.代碼重用性(相同代碼,不用重復(fù)編寫(xiě)) 2.可讀性(編程規(guī)范性,便于其他程序員的閱讀和理解) 3.可擴(kuò)展性(當(dāng)需要增加新

    2024年02月12日
    瀏覽(26)
  • 設(shè)計(jì)模式(二):依賴(lài)倒轉(zhuǎn)原則(詳解)

    本博主將用CSDN記錄軟件開(kāi)發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識(shí),有興趣的小伙伴可以關(guān)注博主!也許一個(gè)人獨(dú)行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠(yuǎn)! 依賴(lài)倒轉(zhuǎn)原則( Dependence Inversion Principle )是指: 高層模塊不應(yīng)該依賴(lài)低層模塊,二者都應(yīng)該依賴(lài)其抽

    2024年02月04日
    瀏覽(21)
  • 設(shè)計(jì)模式(四):里氏替換原則(詳解)

    本博主將用CSDN記錄軟件開(kāi)發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識(shí),有興趣的小伙伴可以關(guān)注博主!也許一個(gè)人獨(dú)行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠(yuǎn)! (1)引入 繼承包含這樣一層含義:父類(lèi)中凡是已經(jīng)實(shí)現(xiàn)好的方法, 實(shí)際上是在設(shè)定規(guī)范和契約 ,

    2024年02月05日
    瀏覽(23)
  • 【Python】新手入門(mén)學(xué)習(xí):詳細(xì)介紹開(kāi)放封閉原則(OCP)及其作用、代碼示例

    【Python】新手入門(mén)學(xué)習(xí):詳細(xì)介紹開(kāi)放封閉原則(OCP)及其作用、代碼示例

    【Python】新手入門(mén)學(xué)習(xí):詳細(xì)介紹開(kāi)放封閉原則(OCP)及其作用、代碼示例 ?? 個(gè)人主頁(yè):高斯小哥 ?? 高質(zhì)量專(zhuān)欄:Matplotlib之旅:零基礎(chǔ)精通數(shù)據(jù)可視化、Python基礎(chǔ)【高質(zhì)量合集】、PyTorch零基礎(chǔ)入門(mén)教程?? 希望得到您的訂閱和支持~ ?? 創(chuàng)作高質(zhì)量博文(平均質(zhì)量分92+),分

    2024年03月14日
    瀏覽(26)
  • Java設(shè)計(jì)模式-前言

    Java設(shè)計(jì)模式-前言

    ?館長(zhǎng)準(zhǔn)備了很多學(xué)習(xí)資料,其中包含 java方面,jvm調(diào)優(yōu),spring / spring boot /spring cloud ,微服務(wù),分布式,前端,js書(shū)籍資料,視頻資料,以及各類(lèi)常用軟件工具,破解工具? 等資源。請(qǐng)關(guān)注“IT技術(shù)館”公眾號(hào),進(jìn)行關(guān)注,館長(zhǎng)會(huì)每天更新資源和更新技術(shù)文章等。請(qǐng)大家多多關(guān)

    2024年01月21日
    瀏覽(23)
  • 【設(shè)計(jì)模式】設(shè)計(jì)原則-里氏替換原則

    定義 任何基類(lèi)可以出現(xiàn)的地方,子類(lèi)一定可以出現(xiàn)。 通俗理解:子類(lèi)可以擴(kuò)展父類(lèi)的功能,但不能改變父類(lèi)原有的功能。 換句話(huà)說(shuō),子類(lèi)繼承父類(lèi)時(shí),除添加新的方法完成新增功能外,盡量不要重寫(xiě)父類(lèi)的方法。 針對(duì)的問(wèn)題 主要作用就是規(guī)范繼承時(shí)子類(lèi)的一些書(shū)寫(xiě)規(guī)則。

    2024年02月14日
    瀏覽(30)
  • 【設(shè)計(jì)模式】設(shè)計(jì)原則-開(kāi)閉原則

    定義 作用 1、方便測(cè)試;測(cè)試時(shí)只需要對(duì)擴(kuò)展的代碼進(jìn)行測(cè)試。 2、提高代碼的可復(fù)用性;粒度越小,被復(fù)用的可能性就越大。 3、提高軟件的穩(wěn)定性和延續(xù)性,易于擴(kuò)展和維護(hù)。 實(shí)現(xiàn)方式 通過(guò)“抽象約束、封裝變化”來(lái)實(shí)現(xiàn)開(kāi)閉原則。通過(guò)接口或者抽象類(lèi)為軟件實(shí)體定義一

    2024年02月15日
    瀏覽(24)
  • 前端設(shè)計(jì)模式和設(shè)計(jì)原則之設(shè)計(jì)原則

    1 開(kāi)閉原則 該原則指出軟件實(shí)體(類(lèi)、模塊、函數(shù)等)應(yīng)該 對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉 。也就是說(shuō),在添加新功能時(shí),應(yīng)該通過(guò)擴(kuò)展現(xiàn)有代碼來(lái)實(shí)現(xiàn),而不是直接修改已有的代碼。這樣可以確?,F(xiàn)有代碼的穩(wěn)定性,并且減少對(duì)其他部分的影響。 在上述例子中,有一個(gè)原始功能

    2024年02月07日
    瀏覽(51)
  • 【Java 設(shè)計(jì)模式】設(shè)計(jì)原則之里氏替換原則

    在軟件開(kāi)發(fā)中,設(shè)計(jì)原則是創(chuàng)建靈活、可維護(hù)和可擴(kuò)展軟件的基礎(chǔ)。 這些原則為我們提供了指導(dǎo)方針,幫助我們構(gòu)建高質(zhì)量、易理解的代碼。 ?單一職責(zé)原則(SRP) ?開(kāi)放/封閉原則(OCP) ?里氏替換原則(LSP) ?依賴(lài)倒置原則(DIP) ?接口隔離原則(ISP) ?合成/聚合復(fù)

    2024年01月20日
    瀏覽(37)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包