一、实现功能
TS 中 类、接口、泛型 的综合使用
实现功能:定义一个操作数据库的 库, 支持 mySql、msSql
要求:mySql、msSql 的功能一样,都有add、update、delete、get 方法
注意:约束统一的规范,以及代码复用性
解决方案:需要约束规范所以要定义接口,需要代码复用所以用到泛型
-
接口:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范
-
泛型 通俗理解:泛型就是解决 类 、接口 、方法 的复用性
二、实现代码
interface DBI<T>{
Add(info:T):boolean;
Edit(info:T,Id:number):boolean;
Delete(Id:number):boolean;
List(Id:number):any[];
}
// 定义一个操作 mySql 数据库的类
// 注意:要实现泛型接口 这个类也应该是一个泛型类
class mySqlDB <T> implements DBI<T>{
Add(info: T): boolean {
console.log(info, '----')
return true
}
Edit(info: T, Id: number): boolean {
return true
}
Delete(Id: number): boolean {
return true
}
List(Id: number):any[] {
return [
{id: "xxxx", content: 'AAAAA'},
{id: "xxxx", content: 'AAAAA'},
]
}
}
class msSqlDB<T> implements DBI<T>{
Add(info: T): boolean {
return true
}
Edit(info: T, Id: number): boolean {
return true
}
Delete(Id: number): boolean {
return true
}
List(Id: number):any[] {
return [
{id: "xxxx", content: 'AAAAA'},
{id: "xxxx", content: 'AAAAA'},
]
}
}
// 定义一个 Use 类 和数据表做映射
class Use{
name:string | undefined;
pass:string | undefined;
}
let u = new Use()
u.name = 'gg';
u.pass = '123'
let omysql = new mySqlDB<Use>() // 类作为参数来约束数据传入的类型
omysql.Add(u)
let omssql = new msSqlDB<Use>()// 类作为参数来约束数据传入的类型
omssql.Add(u)
console.log(omssql.List(1))
图示: