JS设计模式之工厂模式
JS设计模式之工厂模式
工厂模式大体分为三类:
简单工厂模式
、工厂方法模式
、抽象工厂模式
。三者之间的关系,也是渐进式的,抽象化的范围也是越来越高。
1. 简单工厂模式
:
对
同一类
对象创建过程的抽象,在形式上它仅仅只是简单的通过switch
等判断语句,根据不同条件去生成不同对象,且只能创建现有的数据,如果要添加,必须手动添加。
interface IPhone {name: string;price: number;
}enum Phones {hw,mi
}// 这里的 Shop 则表示一个工厂,它将数据包裹,根据需求提供数据。
class Shop {// 华为手机hwPhone:IPhone = {name: "mate 40",price: 4000,};// 小米手机miPhone:IPhone = {name: "p40",price: 4000,};getPhone(type: Phones): IPhone{switch (type) {case Phones.hw:return this.hwPhone;case Phones.mi:return this.miPhone;}}
}const shop1 = new Shop();
const mi1 = shop1.getPhone(Phones.mi);
mi1.name = "nihao";const shop2 = new Shop();
const mi2 = shop2.getPhone(Phones.mi);console.log(mi1, mi2);
2. 工厂方法模式
:
当数据量多时,
简单工厂模式
显而易见的的不适用,每增加一个项目就要手动添加,内容太多。而工厂方法模式
则是对简单工厂模式
的进一步优化,它对同一类对象进行抽象,通过子类
去创建,从而达到精简代码的目的。
interface IPhone {name: string;price: number;
}
class Phone {name: string;price: number;constructor(name: string, price: number) {this.name = name;this.price = price;}
}class Shop {getPhone(name: string, price: number): IPhone{// 通过 子类 去实现数据的创建return new Phone(name, price);}
}const shop1 = new Shop();
const phone1 = shop1.getPhone("华为", 4500);const shop2 = new Shop();
const phone2 = shop2.getPhone("小米", 4000);console.log(phone1, phone2);
3. 抽象工厂模式
:
工厂方法模式
主要是作用与同一类产品,比如说:手机,而抽象工厂模式
是对一产品簇的抽象,比如说, 小米有小米手机,小米笔记本…
// 手机的抽象类
abstract class Phone {name: string;price: number;constructor(name: string, price: number) {this.name = name;this.price = price;}abstract call(): void;
}// 笔记本的抽象类
abstract class Laptop {name: string;price: number;constructor(name: string, price: number) {this.name = name;this.price = price;}// 打游戏abstract game(gameName: string): void;
}/*** 小米本身作为一个产品簇,拥有手机,笔记本的多个品种,* 1. 先实现产品簇中的某个产品类;* 2. 在通过整个工厂,整合所有的产品*/
class MiPhone extends Phone {call() {console.log("少林功夫好哎");}
}class MiLaptop extends Laptop {game(gameName: string) {console.log(`小米电脑适合${gameName}`);}
}class Mi {getPhone(name: string, price: number) {return new MiPhone(name, price);}getLaptop(name: string, price: number) {return new MiLaptop(name, price);}
}class HuaweiPhone extends Phone {call() {console.log("少林功夫好哎");}
}/*** 华为效果类似 *
*/
class HuaweiLaptop extends Laptop {game(gameName: string) {console.log(`小米电脑适合${gameName}`);}
}class Huawei {getPhone(name: string, price: number) {return new HuaweiPhone(name, price);}getLaptop(name: string, price: number) {return new HuaweiLaptop(name, price);}
}const miShop = new Mi();
const miPhone = miShop.getLaptop("P40", 3600);
console.log(miPhone);const huaweiShop = new Huawei();
const huaweiPhone = huaweiShop.getLaptop("meta 40", 4000);
console.log(huaweiPhone);
JS设计模式之工厂模式相关推荐
- js设计模式抽象工厂模式
抽象工厂模式(Abstract Factory) 通过类的抽象使得业务适用于一个产品类簇的创建,而不负责创建某一类产品的实例. JS中是没有直接的抽象类的,因此我们需要在类的方法中抛出错误来模拟抽象类 ...
- Java设计模式(工厂模式>抽象工厂模式和原型模式)
Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...
- JavaScript设计模式--简单工厂模式例子---XHR工厂
JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...
- 三角形圆形创建与擦除java_设计模式---------------简单工厂模式
设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...
- 策略模式和工厂模式的区别_设计模式之工厂模式-工厂方法模式
设计模式之工厂模式-工厂方法模式 大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目. 来源:凯哥Java(kaigejava) 需求: 披萨项目: 要方便披萨品种的扩展.要便于维护.要 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- 设计模式之工厂模式(三)
上一次我们已经通过代码,简单的认识了工厂方法模式,具体的思路请移步到设计模式之工厂模式(二),进行查看.这次,让我们通过设计模式的思想,来好好认识下工厂方法模式. 创建者和产品 所有工厂模式都用来封装 ...
- php工厂模式和单例模式,php 设计模式之工厂模式、单例模式、注册树模式
php 设计模式之工厂模式.单例模式.注册树模式 在软件工程中,创建型设计模式承担着对象创建的职责,尝试创建适合程序上下文的对象,对象创建设计模式的产生是由于软件工程设计的问题,具体说是向设计中增加复 ...
- 教你如何一篇博客读懂设计模式之—--工厂模式
一篇博客读懂设计模式之-工厂模式 工厂模式在我们日常开发的时候经常用到,相信大家都有了一定的了解,工厂模式是一种创建对象的设计模式,它提供一种创建对象的最佳方式. 主要过程是: 定义一个创建对象的接口 ...
- 一篇博客读懂设计模式之---工厂模式
设计模式之-工厂模式 工厂模式: 创建过程: 创建Shape接口 public interface Shape {void draw(); } 创建实现类: public class Circle i ...
最新文章
- Fib(兔子问题)python实现多种方法
- oracle 无备份恢复数据文件
- HDU4472 Count
- matlab操作入门实验报告,matlab操作实验报告
- .NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇
- 使用CLI扩展和重新平衡Couchbase集群
- 怎么用vc采集ni卡数据_8bit,200MS/s 低成本模拟输入高速采集卡FCFR-PCI9850
- ROS小白——knict相机标定(2)
- android104 帧动画,补间动画,属性动画
- Hadoop集群配置搭建
- 迅雷使用积分制的真正作用和目的 [揭密迅雷]
- 围观人类弹琴后,Facebook的AI学会了假装演奏
- 局域网共享设置软件_新页软件:如何设置局域网模式
- mysql数据基本指令_mysql数据库常用命令(详细)
- 绝地求生key钓鱼全套教程加源码
- 产品结构图、功能结构图、信息结构图,区别在这里
- DNF最新纯图色脚本框架2022-4-27
- 2022高压电工考试题库及模拟考试
- 深入计算机组成原理(二十七)SIMD:如何加速矩阵乘法
- 日常生活-不帮人投资理财