工厂方法模式

  • 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
  • 由于js没有abstract抽象类的概念
  • 因此后续关于抽象类的直接使用ts 模拟,便于理解
1
2
3
4
5
6
7
8
9
10
// ts中class前面加abstract: 禁止被实例化。是用来被继承的
// 父类指定结构 子类来实现 避免忘记重写方法导致使用默认的方法
// 没有重写直接报错
abstract class Parent{
}
// 抽象方法只能以abstract开头 没有方法体
// 只能定义在抽象类里面 子类必须重写
abstract class Parent{
abstract sayHi():void;
}

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
abstract class Database {
static username: string = 'admin';
static password: string = '123456';
abstract getDetails(): void
}

class Sql extends Database {
getDetails() {
console.log(Sql.username + 'Sql', Sql.password + 'Sql');
}
}

class Mysql extends Database {
getDetails() {
console.log(Mysql.username + 'Mysql', Mysql.password + 'Mysql');
}
}

class MongoDB extends Database {
getDetails() {
console.log(MongoDB.username + 'MongoDB', MongoDB.password + 'MongoDB');
}
}

const ConnectSql = new Sql()
ConnectSql.getDetails()

const ConnectMysql = new Mysql()
ConnectMysql.getDetails()

const ConnectMongoDB = new MongoDB()
ConnectMongoDB.getDetails()

参考链接