面向?qū)ο笕刂坏亩鄳B(tài)

什么是多態(tài)

在父類中定義的屬性和方法被子類繼承后,可以有不同的實現(xiàn)
用一個業(yè)務場景輔助理解
比如要寫一個h5登錄,登錄到企業(yè)微信,釘釘,即登錄到不同的平臺,就有不同的登錄方式
下面的代碼就是模擬了一個簡單的登錄過程

//h5登錄,登錄到企微,釘釘
///實現(xiàn)了一個多態(tài)的登錄系統(tǒng),允許用戶通過不同的平臺(如釘釘、企微、支付寶)進行登錄。
// 每個平臺都有自己的登錄邏輯,但它們都繼承自一個抽象基類 BaseLogin,
// 該基類定義了登錄的通用流程
function login(phone:string) {
  return `${phone}登錄成功`
}

//這是一個抽象類,定義了登錄的通用流程。
// 它包含一個抽象方法 getUsrInfo,
// 該方法需要在子類中實現(xiàn),用于獲取用戶信息
abstract class BaseLogin {
  protected abstract getUsrInfo():Promise<{ phone: string}>
   async login() {
    const userInfo = await this.getUsrInfo()
    const token = login(userInfo.phone)
    this.afterLogin(token)
    console.log('登錄成功')
  }
  private afterLogin(token:string) {
    console.log(`登錄成功,token:${token},保存到本地`)
  }
}

//子類 DingTalkLogin,并實現(xiàn)了 getUsrInfo 方法,用于獲取各自平臺的用戶信息。
class DingTalkLogin extends BaseLogin {
  async getUsrInfo() {
    //獲取釘釘?shù)挠脩粜畔?    console.log('獲取釘釘?shù)挠脩粜畔?)
    //模擬請求
    await new Promise((resolve)=>setTimeout(resolve,1000))
    return { phone: '123456' }
  }
}

//子類 QiweiLogin
class QiweiLogin extends BaseLogin {
  async getUsrInfo() {
    //獲取企微的用戶信息
    console.log('獲取企微的用戶信息')
    //模擬請求
    await new Promise((resolve)=>setTimeout(resolve,1000))
    return { phone: '654321' }
  }
}
//子類 AliPayLogin
class AliPayLogin extends BaseLogin {
  async getUsrInfo() {
    //獲取支付寶的用戶信息
    console.log('獲取支付寶的用戶信息')
    //模擬請求
    await new Promise((resolve)=>setTimeout(resolve,1000))
    return { phone: '123456' }
  }
}

//工廠函數(shù) loginFactory,
// 根據(jù)傳入的 type 參數(shù)(如 'dingTalk', 'qiwei', 'aliPay'),
// 返回對應的登錄實例
const loginMap = {
  dingTalk: DingTalkLogin,
  qiwei: QiweiLogin,
  aliPay:AliPayLogin
}

function loginFactory(type:keyof typeof loginMap) {
  return loginMap[type]()
}

//調(diào)用實例 需要哪個平臺的登錄就傳入對應的key
loginFactory('dingTalk').login()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容