欢迎光临
我们一直在努力

body是什么厂[JS设计模式]:工厂模式(3)

// 创建手机抽象工厂
class MobilePhoneFactory {
    // 提供操作系统的接口
    createOS() {
        throw new Error('抽象工厂不允许直接调用,你需要将我重写');
    }

    // 提供硬件的接口
    createHardWare() {
        throw new Error('抽象工厂不允许直接调用,你需要将我重写');
    }
}

// 生产一种新的手机产品线(如:安卓高通手机)
class FakeStarFactory extends MobilePhoneFactory{
    // 操作系统
    createOs() {
        return new AndriodOS();
    }

    // 硬件
    createHardWare() {
        return new QualCommHardWare();
    }
}

// 定义操作系统这类产品的抽象产品类
class OS {
    controlHardWare() {
        throw new Error('抽象产品方法不允许直接调用,你需要将我重写');
    }
}

class AndriodOS extends OS {
    controlHardWare() {
        console.log('我会用安卓的方式来操作硬件');
    }
}

class AppleOS extends OS {
    controlHardWare() {
        console.log('我会用苹果的方式来操作硬件');
    }
}

// 硬件类产品同理
// 定义手机硬件这类产品的抽象产品类
class HardWare {
    // 手机硬件的共性方法,这里提取了“根据命令运作”这个共性
    operateByOrder() {
        throw new Error('抽象产品方法不允许直接调用,你需要将我重写');
    }
}

// 定义具体硬件的具体产品类
class QualCommHardWare extends HardWare {
    operateByOrder() {
        console.log('我会用高通的方式去运转');
    }
}

class MiHardWare extends HardWare {
    operateByOrder() {
        console.log('我会用小米的方式去运转');
    }
}

// 生产一台高通安卓手机
var phone= new FakeStarFactory();
// 拥有操作系统
var myOs = phone.createOs();
// 拥有硬件
var myHardWare = phone.createHardWare();

// 启动操作系统(输出“我会用安卓的方式来操作硬件”)
myOs.controlHardWare();
// 唤醒硬件(输出“我会用高通的方式去运转”)
myHardWare.operateByOrder();
赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » body是什么厂[JS设计模式]:工厂模式(3)

登录

找回密码

注册