>  기사  >  웹 프론트엔드  >  JavaScript 디자인 패턴 시리즈 1: 팩토리 패턴

JavaScript 디자인 패턴 시리즈 1: 팩토리 패턴

不言
不言원래의
2018-04-02 13:50:271575검색

이 글에서는 JavaScript 디자인 패턴 시리즈인 팩토리 패턴을 공유합니다. 관심 있는 친구들은 한 번 살펴보세요

Design 패턴

디자인 패턴(디자인 패턴) 컨셉: 设计模式(design pattern)概念:
是一套反复使用、思想成熟、经过分类和无数实战设计经验的总结。是为了代码可重用、可扩展、可解耦、更容易被人理解和保证代码可靠性。

设计模式共有23种,我今天先来了解一下工厂模式(Factory Pattern),其他的模式将会在后续的博客中陆续为大家讲解。

前言:本系列代码已上传GitHub地址https://github.com/HolyZheng/...

工厂模式

工厂模式,正像它的名字一样,可以像工厂一样生产出我们想要的东西,只要我们提供原料。在我们日常编写代码过程中,很可能,我们不知不觉中就已经使用过工厂模式。我们看一个简单的例子:

//工厂模式很基础的的一个例子
function createPerson (name,age) {
  var person = new Object();
  person.name = name;
  person.age = age;
  return person;
}

var Holz = createPerson ("Holz", "21");
console.log(Holz);
/*
{
age: "21",
name: "Holz"
}
*/
var Tom = createPerson ("Tom", "7");
console.log(Tom);
/*
{
age: "7",
name: "Tom"
}
*/

在这个函数中,我可以通过传入不同的参数,创建具有不同参数值得对象。可以看到,工厂模式其实很简单。

工厂模式(Factory Pattern)主要分为简单工厂模式和抽象工厂模式。

简单工厂模式

简单工厂(Simple Factory Pattern)模式主要用于创建同一类的对象,比如我们创建需要一个身份,老师或者学生。可以通过下面这个函数:

//简单工厂模式。
var simpleCreatePerson = function (type, person) {
return this[type](person);
}

simpleCreatePerson.prototype = {
  student: function (person) {
    var Astudent = new Object();
    Astudent.name = person.name;
    Astudent.age = person.age;
    return Astudent;
  },
  teacher: function (person) {
    var Ateacher = new Object();
    Ateacher.name = person.name;
    Ateacher.age = person.age;
    return Ateacher;
  }
}

var teacher = new simpleCreatePerson("teacher", {name:"郑老师", age:25 });
var student = new simpleCreatePerson("student", {name:"郑同学", age:21 });

console.log(teacher);
/*
this is a teacher
{name:"郑老师", age: 25}
*/
console.log(student);
/*
this is a teacher
{name:"郑同学", age: 25}
*/

我们可以传入不同的 type 比如"student"或“teacher”去创建不同的对象,然后再通过不同的person对象去给里面的属性赋值。无论是"student"或者"teacher"都是person,所以说简单工厂函数就是用来创建同一类对象的不同实例。

上面的代码通过原型_prototype_去添加两个函数,(关于原型的知识,不是一两句可以讲完的,如果不懂得话,大家可以到网上去搜索相关的资料进行了解)然后通过this[type]去选择不同的方法,如果这里不明白的话我可以解释一下,this是一个对象,指向当前函数(在JavaScript里函数是对象),然后this[属性名/方法名] 去调用内部的属性或方法,那么this[type] (person)就是调用对应的方法去实例化一个具体的类(student或teacher)。通过this[type] (person)去调用。
这就是简单工厂函数。

抽象工厂模式

抽象工厂模式 :与简单工厂函数不同的是,抽象工厂函数会先设计好接口,具体的实现在子类中进行。这样看概念有点模糊,我们来看一个例子:

我们定义一个父类,abstractCreatePerson也就是创建一个人,然后这个人有一个自我介绍的方法方法selfIntroduction,那么不同的人就有不同的介绍内容,这个时候我们就可以用到抽象工厂模式:

var abstractCreatePerson = function () {};

abstractCreatePerson.prototype = {
  selfIntroduction: function () {
    throw new Error("请先实例化此方法!");
  }
}

var student = Object.create(abstractCreatePerson.prototype);
student.selfIntroduction = function () {
  console.log("I am a sutdent, my name is holz!");
}
student.selfIntroduction();
/*
I am a sutdent, my name is holz!
*/
var teacher = Object.create(abstractCreatePerson.prototype);
teacher.selfIntroduction = function () {
  console.log("I am a teacher, my name is xxxx!");
}
teacher.selfIntroduction();
/*
I am a teacher, my name is xxxx!
*/

可以看到这段代码,父类 abstractCreatePerson입니다. set 반복적인 사용과 성숙한 사고, 분류와 수많은 실무 디자인 경험을 요약한 것입니다. 코드를 재사용 가능하고 확장 가능하며 분리 가능하고 이해하기 쉽게 만들고 코드 신뢰성을 보장하는 것입니다.

총 23개의 디자인 패턴이 있습니다. 오늘은 팩토리 패턴을 살펴보겠습니다. 다른 패턴은 다음 블로그에서 설명하겠습니다.
머리말: 이 일련의 코드는 GitHub 주소 https://github.com/HolyZheng/...
에 업로드되었습니다.

Factory 모드
  • Factory 모드는 이름처럼 공장처럼 우리가 원자재를 제공하는 한 우리가 원하는 것을 생산합니다. 일상적인 코딩 과정에서 우리는 이를 모르고 팩토리 패턴을 사용했을 가능성이 매우 높습니다. 간단한 예를 살펴보겠습니다.

    rrreee

    이 함수에서는 다양한 매개변수를 전달하여 다양한 매개변수 값을 가진 객체를 생성할 수 있습니다. 보시다시피 팩토리 패턴은 실제로 매우 간단합니다.
  • 팩토리 패턴은 크게 단순 팩토리 패턴과 추상 팩토리 패턴으로 구분됩니다.
  • Simple Factory Pattern

    Simple Factory Pattern이 패턴은 주로 동일한 유형의 객체를 만드는 데 사용됩니다. 예를 들어 만들려면 ID, 교사 또는 학생이 필요합니다. 다음 함수를 사용할 수 있습니다:
  • rrreee
  • "student" 또는 "teacher"와 같은 다양한 유형을 전달하여 다양한 객체를 만든 다음, 다양한 person 객체를 사용하여 내부 속성에 값을 할당할 수 있습니다. "학생"과 "교사"는 모두 사람이므로 동일한 유형의 개체에 대한 서로 다른 인스턴스를 만드는 데 간단한 팩토리 함수가 사용됩니다.

    위 코드는 프로토타입 _prototype_을 사용하여 두 가지 기능을 추가한 것입니다. (프로토타입에 대한 지식은 한두 문장으로 설명할 수 없습니다. 이해가 되지 않으면 관련 정보를 검색해 보시면 됩니다. 인터넷. 이해하려면) 이것을 사용하여 다른 방법을 선택하십시오. 여기서 이해가 되지 않으면 설명할 수 있습니다. 이것은 현재 함수를 가리키는 객체입니다(JavaScript에서는 함수가 객체입니다). 그리고 this[속성 이름/메서드 이름] ]을 사용하여 내부 속성이나 메서드를 호출하면 this[유형](사람)이 해당 메서드를 호출하여 특정 클래스(학생 또는 교사)를 인스턴스화합니다. 이[유형](사람)을 통해 호출되었습니다.
  • 간단한 팩토리 기능입니다.

추상 팩토리 패턴

추상 팩토리 패턴: 단순한 팩토리 함수와 달리 추상 팩토리 함수는 인터페이스를 먼저 디자인하고 구체적인 구현은 서브클래스에서 수행됩니다. 개념이 좀 모호해서 예를 들어보겠습니다.


사람을 생성하는 상위 클래스인 abstractCreatePerson을 정의하고, 이 사람이 자기소개 메소드 를 갖습니다. >selfIntroduction code>, 그러면 사람들마다 다른 소개 내용이 있습니다. 이때 추상 팩토리 패턴을 사용할 수 있습니다:

rrreee🎜이 코드를 볼 수 있습니다. 상위 클래스 abstractCreatePerson가 먼저 선언합니다. 그런 다음 Object.create() 메서드를 통해 이 상위 클래스를 상속한 다음(원래 프로토타입 체인을 덮어쓰지 않기 때문에) 하위 클래스에 따라 인스턴스 메서드가 다릅니다. 🎜이것은 코드의 재사용성을 향상시키고 모듈 간의 결합을 줄이는 팩토리 패턴입니다. 🎜🎜🎜요약🎜🎜🎜🎜팩토리 패턴은 이름처럼 원자재만 제공하면 공장처럼 우리가 원하는 것을 생산할 수 있습니다.🎜🎜🎜🎜팩토리 패턴은 코드의 재사용성을 높이고 코드의 재사용성을 향상시킵니다. 모듈 간의 결합🎜🎜🎜🎜팩토리 패턴은 주로 동일한 클래스🎜🎜🎜🎜🎜🎜🎜🎜🎜

위 내용은 JavaScript 디자인 패턴 시리즈 1: 팩토리 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.