美文网首页
2021-11-16 - 学习记录

2021-11-16 - 学习记录

作者: 张中华 | 来源:发表于2021-11-17 07:49 被阅读0次
  1. 设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型

设计模式:工厂模式

简单工厂

/*
 * @Author: zzh
 * @Date: 2021-10-20 17:07:13
 * @LastEditors: zzh
 * @LastEditTime: 2021-11-16 13:42:10
 * @FilePath: \origin\设计模式\simpleFactory.js
 * @Description: 简单工厂方法
 */

/**
 * 简单工厂方法:
 * 简单工厂模式:又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象。
 * 工厂方法的核心,也是最简单的工厂方法
 * 创建一个工厂,然后利用参数告知这个工厂,让其创建指定的对象
 * 优点:解耦,把不同且功能相似的对象进行隔离,利用工厂统一管理
 * 缺点:如果新增或者删除,影响到了工厂获取产品的方法,违背了开闭原则 -> 工厂方法模式
 */

class Car {
     go() {
         console.log('开车出门咯...');
     }
}

class Bike {
    go() {
        console.log('骑自行车出门咯...');
    }
}

class SimpleFactory {
    getVehicle (vehicle) {
        switch (vehicle) {
            case 'car': return new Car();
            case 'bike': return new Bike();
            // ..., 可能还有很多其他交通工具
        }
    }

}

// 测试
const factory = new SimpleFactory(); // 先获取工厂示例,这里使用静态方法,直接获取交通工具
const myVehicle = factory.getVehicle('bike'); // 获取想要的出行工具
myVehicle.go(); // 出发

工厂方法

/**
 * 继简单工厂之后,我们知道,简单工厂模式在新增、修改、删除时会对工厂产生一定的影响,违背了开闭原则,那么工厂方法便解决了这一问题
 * 工厂方法模式的本意就是将实际创建对象的工作推迟到子类中,所以我们可以将工厂方法看作是一个实例化对象的工厂类。
 * 角色:抽象工厂,具体工厂,抽象产品,具体产品
 * 
 */
// 因为js没有接口的概念,所以不需要创建抽象工厂

class Car {
    go() {
        console.log('开车出门咯...');
    }
}

class Bike {
    go() {
        console.log('骑自行车出门咯...');
    }
}

// 新增:class XXXX {}
// ....

class Factory {
    getVehicle(type) {
        return this[type];
    }
}

Factory.prototype.Car = new Car();
Factory.prototype.Bike = new Bike();
// 新增:Factory.prototype.XXX = new XXX();
// ...

// 测试
const factory = new Factory();
const myVehicle = factory.getVehicle('Bike');
myVehicle.go();

抽象工厂


/**
 * 工厂方法解决的是一个工厂针对一种类型的系列产品,
 * 那么如果是一个工厂,里面有多种系列产品呢?例如汽车,自行车;手机,mp3;衣服,帽子等;
 * 当然可以使用多个工厂方法,如果在一个工厂里面该如何解决呢?
 * 
 */

class Car {
    go() {
        console.log('开车出门咯...');
    }
}

class Bike {
    go() {
        console.log('骑自行车出门咯...');
    }
}
// 新增:class XXXX {}
// ....


class Phone {
    start() {
        console.log('打开手机...');
    }
}

class Mp3 {
    start() {
        console.log('打开MP3...');
    }
}

// 新增:class XXXX {}
// ....

class Factory {
    getVehicle(type, product) {
        return this[type][product];
    }
}

Factory.prototype.vehicle = {};
Factory.prototype.vehicle.Car = new Car();
Factory.prototype.vehicle.Bike = new Bike();
// 新增:Factory.prototype.XXX = new XXX();
// ...

Factory.prototype.electronic = {};
Factory.prototype.electronic.Phone = new Phone();
Factory.prototype.electronic.Mp3 = new Mp3();
// 新增:Factory.prototype.YYYY = new YYYY();
// ...


// 测试
const factory = new Factory();
const myVehicle = factory.getVehicle('vehicle', 'Bike');
myVehicle.go();

const myElectronic = factory.getVehicle('electronic', 'Phone');
myElectronic.start();

相关文章

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 与相处该遵循的原则

    2021-11-16 成长学习课堂【与相处该遵循的原则】 我们与别人相处,该遵循怎样的原则呢? 阳明...

  • 2021-11-16学习学习,再学习

    初读这句话,我以为就是和努力努力,继续努力,差不多。 其实,你再读一遍:学习学习,再学习。先学会如何学习,掌握学习...

  • gitee-搭建免费个人博客-全攻略

    title: gitee 搭建免费个人博客 全攻略date: 2021-11-16 16:23:01tags: 个...

  • 2021-11-16申论学习感悟

    1.可以练习精简表达; 2.需要学会分类表达。刚才尝试做了一道题,发现自己摘抄的内容是正确的,可是写在答题卡上,表...

  • No 251 麦芽糖能成功吗之二

    文/Doctorzuo 2021-11-16 这是我重新日更的第251天,小童宝4岁 昨晚,小麦已经露出了尖尖角。...

  • 《金吾生〈正蒙〉日记496.2021-11-16》

    《金吾生〈正蒙〉日记496.2021-11-16》 今天是辛丑己亥戊辰,十月十二,2021-11-16星期二。 【...

  • 生命为何多苦难(四)

    原创 后山萤火 公众号:煦然之光 2021-11-16 07:08 电磁波中的一段(380纳米-780纳米)被...

  • Flutter学习记录-汇总

    Flutter学习记录-布局Flutter学习记录-页面跳转Flutter学习记录-交互Flutter学习记录-基...

  • 2018.9.14托小级部学习记录检查

    王淑月老师的学习记录 李静老师的学习记录 赵小盼学习记录 王朝燕学习记录 李杰老师学习记录 荆宁宁老师学习记录 吴...

网友评论

      本文标题:2021-11-16 - 学习记录

      本文链接:https://www.haomeiwen.com/subject/rduhtrtx.html