国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

渭南市工程建設(shè)項目審批平臺免費的關(guān)鍵詞優(yōu)化軟件

渭南市工程建設(shè)項目審批平臺,免費的關(guān)鍵詞優(yōu)化軟件,貴州省興義市專做網(wǎng)站公司,產(chǎn)品設(shè)計公司網(wǎng)站以下內(nèi)容均來自抖音號【it楠老師教java】的設(shè)計模式課程。 1、原理概述 子類對象(objectofsubtype/derivedclass)能夠替換程序(program)中父類對象(objectofbase/parentclass)出現(xiàn)的任何地方&#xff0c…

以下內(nèi)容均來自抖音號【it楠老師教java】的設(shè)計模式課程。

1、原理概述

子類對象(objectofsubtype/derivedclass)能夠替換程序(program)中父類對象(objectofbase/parentclass)出現(xiàn)的任何地方,并且保證原來程序的邏輯行為(behavior)不變及正確性不被破壞。

2、簡單的示例1

// 基類:鳥類
public class Bird {
public void fly () {
System . out . println ( "I can fly" );
} }
// 子類:企鵝類
public class Penguin extends Bird {
// 企鵝不能飛,所以覆蓋了基類的 fly 方法,但這違反了里氏替換原則
public void fly () {
throw new UnsupportedOperationException ( "Penguins can't fly" );
}
}
為了遵循LSP,我們可以重新設(shè)計類結(jié)構(gòu),將能飛的行為抽象到一個接口中,讓需要飛行能力的鳥類實現(xiàn)這個接口:
// 飛行行為接口
public interface Flyable {
void fly ();
}
// 基類:鳥類
public class Bird {
}
// 子類:能飛的鳥類
public class FlyingBird extends Bird implements Flyable {
@Override
public void fly () {
System . out . println ( "I can fly" );
}
}
// 子類:企鵝類,不實現(xiàn) Flyable 接口
public class Penguin extends Bird {
}

這里就該明確那些方法是通用的,哪些方法是部分能用的。

比如通用的方法可以放到class bird里。

public void say(){ System.out.println("我屬于鳥科")}

public void say(){ System.out.println("我又一雙翅膀,盡管不能飛")}

不同的用的方法,可以放到接口里比如有的鳥很小 有的鳥很大

interface? BigBird{ double height()}

interface? SmallBird{ double height()}

上述可能不太準(zhǔn)確,但是核心思想就是抽取公共的方法到類里,抽取特殊的方法到接口里。

再舉個例 比如

class? door{

//核心方法 只要是門 不管你啥樣的 你肯定又面積吧,有價格吧

int price();

int area();

}

但是有的門市防火門 有的是防盜門, 有的是....

interface FangHuo{ void canFangHuo()};

interface FangDao{ void canFangDao()};

3、示例2

我們再來看一個基于數(shù)據(jù)庫操作的案例。假設(shè)我們正在開發(fā)一個支持多種數(shù)據(jù)庫的程序,包括MySQL、PostgreSQL和SQLite。我們可以使用里氏替換原則來設(shè)計合適的類結(jié)構(gòu),確保代碼的可維護(hù)性和擴展性。 首先,我們定義一個抽象的Database 基類,它包含一些通用的數(shù)據(jù)庫操作方法, 如 connect() 、disconnect() 和 executeQuery() 。這些方法的具體實現(xiàn)將在 子類中完成。

public abstract class Database {
public abstract void connect ();
public abstract void disconnect ();
public abstract void executeQuery ( String query );
}

然后,為每種數(shù)據(jù)庫類型創(chuàng)建一個子類,繼承自 Database 基類。這些子類需要實現(xiàn)基類中定義的抽象方法,并可以添加特定于各自數(shù)據(jù)庫的方法。

這里新手要思考下 為什么用abstract class 怎么不用class 怎么不用interface

不用class,因為我這里還沒有具體到那類數(shù)據(jù)源,其實可以定義個jdbcDatabase ,定義屬性driver,url,user ,password。就是更一部的抽取

不用interface 因為connect close 和query是所有數(shù)據(jù)源都有操作!!!

public class MySQLDatabase extends Database {
@Override
public void connect () {
// 實現(xiàn) MySQL 的連接邏輯
}
@Override
public void disconnect () {
// 實現(xiàn) MySQL 的斷開連接邏輯
}
@Override
public void executeQuery ( String query ) {
// 實現(xiàn) MySQL 的查詢邏輯
}
// 其他針對 MySQL 的特定方法
}
public class PostgreSQLDatabase extends Database {
// 類似地,為 PostgreSQL 實現(xiàn)相應(yīng)的方法
}
public class SQLiteDatabase extends Database {
// 類似地,為 SQLite 實現(xiàn)相應(yīng)的方法
}

?

這樣設(shè)計的好處是,我們可以在不同的數(shù)據(jù)庫類型之間靈活切換,而不需要修改大量代碼。只要這些子類遵循里氏替換原則,我們就可以放心地使用基類的引用來操作不同類型的數(shù)據(jù)庫。例如:?

public class DatabaseClient {
private Database database ;
public DatabaseClient ( Database database ) {
this . database = database ;
}
public void performDatabaseOperations () {
database . connect ();
database . executeQuery ( "SELECT * FROM users" );
database . disconnect ();
}
}
public class Main {
public static void main ( String [] args ) {
// 使用 MySQL 數(shù)據(jù)庫
DatabaseClient client1 = new DatabaseClient ( new MySQLDatabase ());
client1 . performDatabaseOperations ();
// 切換到 PostgreSQL 數(shù)據(jù)庫
DatabaseClient client2 = new DatabaseClient ( new PostgreSQLDatabase ());
client2 . performDatabaseOperations ();
// 切換到 SQLite 數(shù)據(jù)庫
DatabaseClient client3 = new DatabaseClient ( new SQLiteDatabase ());
client3 . performDatabaseOperations ();
}
}

好了,我們稍微總結(jié)一下。雖然從定義描述和代碼實現(xiàn)上來看,多態(tài)和里式替換有點類似,但它們關(guān)注的角度是不一樣的。多態(tài)是面向?qū)ο缶幊痰囊淮筇匦?#xff0c;也是面向?qū)ο缶幊陶Z言的一種語法。它是一種代碼實現(xiàn)的思路。而里式替換是一種設(shè)計原則,是用來指導(dǎo)繼承關(guān)系中子類該如何設(shè)計的,子類的設(shè)計要保證在替換父類的時候,不改變原有程序的邏輯以及不破壞原有程序的正確性。?

2 、哪些代碼明顯違背了 LSP

1.子類覆蓋或修改了基類的方法

當(dāng)子類覆蓋或修改基類的方法時,可能導(dǎo)致子類無法替換基類的實例而不引起問題。這違反了LSP,會導(dǎo)致代碼變得脆弱和不易維護(hù)。

public class Bird {
public void fly () {
System . out . println ( "I can fly" );
}
}
public class Penguin extends Bird {
@Override
public void fly () {
throw new UnsupportedOperationException ( "Penguins can't fly" );
}
}
在這個例子中, Penguin 類覆蓋了 Bird 類的 fly() 方法,拋出了一個異常。這違反了LSP,因為現(xiàn)在 Penguin 實例無法替換 Bird 實例而不引發(fā)問題。

?

2、子類違反了基類的約束條件

當(dāng)子類違反了基類中定義的約束條件(如輸入、輸出或異常等),也會違反LSP。

public class Stack {
private int top ;
private int [] elements ;
public Stack ( int size ) {
elements = new int [ size ];
top = - 1 ;
}
public void push ( int value ) {
if ( top >= elements . length - 1 ) {
throw new IllegalStateException ( "Stack is full" );
} elements [ ++ top ] = value ;
}
public int pop () {
if ( top < 0 ) {
throw new IllegalStateException ( "Stack is empty" );
}
return elements [ top -- ];
}
}
// 正數(shù)的棧
public class NonNegativeStack extends Stack {
public NonNegativeStack ( int size ) {
super ( size );
}
@Override
public void push ( int value ) {
if ( value < 0 ) {
throw new IllegalArgumentException ( "Only non-negative values are allowed" );
}
super . push ( value );
}
}
// 正確的寫法
public class NonNegativeStack extends Stack {
public NonNegativeStack ( int size ) {
super ( size );
}
public void pushNonNegative ( int value ) {
if ( value < 0 ) {
throw new IllegalArgumentException ( "Only non-negative values are allowed" );
}
super . push ( value );
}
}

這里感覺給的資料有問題。。。等我看完視頻在說?

http://aloenet.com.cn/news/43938.html

相關(guān)文章:

  • 奧鵬網(wǎng)頁設(shè)計與網(wǎng)站建設(shè)公司推廣渠道
  • 建設(shè)電子票務(wù)系統(tǒng)的網(wǎng)站需要多少錢百度seo多久能優(yōu)化關(guān)鍵詞
  • 怎么用ps做靜態(tài)網(wǎng)站管理培訓(xùn)
  • 煙臺網(wǎng)站建設(shè)-中國互聯(lián)看seo
  • 網(wǎng)絡(luò)企業(yè)做網(wǎng)站免費seo刷排名
  • 可信網(wǎng)站是否必須做網(wǎng)站自動推廣軟件免費
  • 計算機網(wǎng)站開發(fā)職業(yè)定位app開發(fā)制作
  • 網(wǎng)站建設(shè)審核需要多長時間市場調(diào)研報告模板
  • qq空間認(rèn)證的網(wǎng)站后臺根目錄百度怎么推廣網(wǎng)站
  • 十年經(jīng)驗網(wǎng)站開發(fā)企業(yè)百度地圖人工電話
  • 建設(shè)網(wǎng)站 教學(xué)反思seo網(wǎng)站優(yōu)化收藏
  • 南京專業(yè)網(wǎng)站營銷小程序推廣平臺
  • dw做旅游網(wǎng)站教程怎么聯(lián)系百度人工服務(wù)
  • 做國際貿(mào)易的網(wǎng)站產(chǎn)品品牌策劃方案
  • 電子商務(wù)公司網(wǎng)站建立前期準(zhǔn)備網(wǎng)絡(luò)營銷管理名詞解釋
  • 可以做視頻推廣的網(wǎng)站有哪些免費注冊個人網(wǎng)站不花錢
  • 上海龍象建設(shè)集團公司網(wǎng)站網(wǎng)絡(luò)平臺營銷
  • wordpress上傳swf網(wǎng)站優(yōu)化排名公司哪家好
  • 鄭州上海做網(wǎng)站的公司有哪些熊貓關(guān)鍵詞工具
  • 張家口手機臺app下載武漢百度推廣優(yōu)化
  • 公司網(wǎng)站維護(hù)費大概需要多少seo綜合查詢 站長工具
  • 東莞萬江網(wǎng)站制作網(wǎng)絡(luò)營銷產(chǎn)品的特點
  • 如何做網(wǎng)站的需求分析系統(tǒng)清理優(yōu)化工具
  • 閔行區(qū)做網(wǎng)站公司百度指數(shù)工具
  • 我們網(wǎng)站的優(yōu)勢北京seo報價
  • wordpress 獨立站營銷網(wǎng)站建設(shè)規(guī)劃
  • 純css做的響應(yīng)式網(wǎng)站一鍵優(yōu)化
  • 設(shè)計網(wǎng)站什么叫空間不穩(wěn)定seo關(guān)鍵詞排名優(yōu)化銷售
  • 大型購物網(wǎng)站開發(fā)網(wǎng)絡(luò)推廣軟文范文
  • 樂山網(wǎng)站建設(shè)培訓(xùn)學(xué)校網(wǎng)站seo優(yōu)化發(fā)布高質(zhì)量外鏈