- vừa được xem lúc

Blog#75: JavaScriptでファクトリーデザインパターンを理解する

0 0 26

Người đăng: NGUYỄN ANH TUẤN

Theo Viblo Asia

Bài viết này được mình dịch từ một bài viết tương tự của mình (Link tham khảo).

Để giúp các bạn có thể nâng cao trình độ tiếng Nhật, Blog này mình sẽ viết bằng tiếng Nhật.

Mục tiêu sẽ là, sử dụng Technical Document để học Tiếng Nhật. Mình sẽ cố gắng sử dụng ngữ pháp và từ vựng đơn giản nhất (tầm N4-N3) để giúp các bạn đọc nó dễ dàng hơn.


こんにちは、私は東京からのフルスタックWebデベロッパーであるTUANです。

今後の便利で面白い記事を見逃さないように、私のブログをフォローしてください。

ファクトリーパターンは、スーパークラスでオブジェクトを作成する人気のあるデザインパターンであり、サブクラスが作成されるオブジェクトのタイプを変更できるようにします。これは、オブジェクトを作成するための一貫したインターフェースを提供しつつ、実際に作成されるオブジェクトのタイプを柔軟にする必要がある場合に便利です。

この記事では、ファクトリーパターンが何であるかと、JavaScriptで関数型プログラミングを使用してどのように実装できるかを見ていきます。また、ファクトリーパターンをコードで使用するメリットとデメリットについても議論します。

ファクトリーパターンとは何ですか?

ファクトリーパターンは、スーパークラスでオブジェクトを作成する方法であり、サブクラスが作成されるオブジェクトの種類を変更することができるようにするものです。 これは、スーパークラスに特定のタイプのオブジェクトを作成するための引数を受け取るファクトリーメソッドを作成することで実現されます。

例えば、フルタイム、パートタイム、テンポラリ、および契約社員など、異なる種類のエンプロイオブジェクトを作成する必要があるシステムを考えてみます。 各種類のエンプロイオブジェクト用に別々のクラスを作成する代わりに、タイプ引数を受け取るファクトリーメソッドを持つ単一のEmployeeクラスを使用して、ファクトリーパターンを使用して適切なタイプのエンプロイオブジェクトを作成できます。

JavaScriptでファクトリーパターンを実装するには、オブジェクトを返す関数を使用することができます。そのファクトリーメソッドは、それに渡される引数に基づいて、異なるタイプのオブジェクトを作成するために使用できます。

ここに、JavaScriptでファクトリーパターンがどのように実装されるかの例があります。

function Factory() { this.createEmployee = function(type) { let employee; if (type === "fulltime") { employee = new FullTime(); } else if (type === "parttime") { employee = new PartTime(); } else if (type === "temporary") { employee = new Temporary(); } else if (type === "contractor") { employee = new Contractor(); } employee.type = type; employee.say = function() { console.log(`I am a ${this.type}, and I get ${this.hourly}/hour`); } return employee; }
} const FullTime = function() { this.hourly = "$12";
}; const PartTime = function() { this.hourly = "$11";
}; const Temporary = function() { this.hourly = "$10";
}; const Contractor = function() { this.hourly = "$15";
}; const factory = new Factory(); const fullTimeEmployee = factory.createEmployee("fulltime");
fullTimeEmployee.say(); // "I am a fulltime, and I get $12/hour" const partTimeEmployee = factory.createEmployee("parttime");
partTimeEmployee.say(); // "I am a parttime, and I get $11/hour"

この例では、ファクトリー関数には、タイプ引数を取り、そのタイプに基づいて従業員オブジェクトを作成するcreateEmployeeメソッドがあります。createEmployeeメソッドは、どのタイプの従業員を作成するかを判断するために複数のif文を使用し、その後、従業員オブジェクトのhourlyプロパティをタイプに基づいて設定します。次に、従業員オブジェクトのsayメソッドを使用して、コンソールにメッセージをログすることができます。

FullTimePartTimeTemporary、およびContractor関数は、従業員オブジェクトの特定のプロパティを定義するサブクラスです。

ファクトリーパターンの利点

ファクトリーパターンをコードに使用することには、いくつかの利点があります:

  • 柔軟性: ファクトリーパターンは、作成されるオブジェクトの種類についての柔軟性を提供し、必要に応じてオブジェクトの種類を追加または削除しやすくなります。

  • コードの再利用: ファクトリーパターンは、同じファクトリーメソッドを使用して異なる種類のオブジェクトを作成することで、コードの再利用を可能にします。

  • 使いやすい: ファクトリーパターンは、オブジェクトを作成するための一貫したインタフェースを提供し、システムの他の部分が使いやすくなります。

ファクトリーパターンの欠点

ファクトリーパターンにはいくつかの利点がありますが、欠点もあるため注意する必要があります。

  • 複雑さ: ファクトリーパターンは、複数のサブクラスを作成し、ファクトリーメソッドを作成する必要があるため、コードをより複雑にする可能性があります。

  • 強い結合: ファクトリーパターンは、オブジェクトとファクトリーメソッドの間に強い結合を生成する可能性があり、オブジェクトの振る舞いを変更または修正することがより困難になることがあります。

  • テストの困難さ: ファクトリーパターンは、テストのためにオブジェクトをモックやスタブすることが困難であるため、コードのテストをより困難にすることがあります。

ファクトリーパターンを使用するとき

異なる種類のオブジェクトを作成する必要があるときであり、それらを作成するための一貫したインタフェースを提供したいときに、ファクトリーパターンが最も役立ちます。 これは、さまざまなオブジェクトを作成する必要があるシステムがあり、オブジェクトの特定の実装が時間の経過とともに変更される場合に起こるかもしれません。

しかし、ファクトリーパターンは必要に応じてのみ使用することが重要であることを忘れないでください。 ファクトリーパターンの過剰使用は、複雑で保守やテストが困難なコードにつながる可能性があります。

結論

ファクトリーパターンは、スーパークラスで異なる種類のオブジェクトを作成するための有用なツールであり、サブクラスが作成される特定の種類のオブジェクトを変更できるようにします。 これは柔軟性とコードの再利用を提供しますが、また複雑さを増加させ、タイトカップリングを生じることもあります。 ファクトリーパターンを必要に応じてのみ使用することが重要であり、その潜在的な欠点を認識することが重要です。

この記事が、ファクトリーパターンを理解するのに役立ち、またJavaScriptで関数型プログラミングを使用してそれを実装する方法を理解するのに役立つと思います。 もし質問があるか、またはソフトウェア開発におけるデザインパターンについてもっと知りたいと思う場合は、お気軽に質問してください。

いつものように、この記事を楽しんで新しいことを学んでいただけたと思います。

ありがとうございました。次の記事でお会いしましょう!

この記事が気に入ったら、いいねをして購読してサポートしてください。ありがとうございます。

Ref

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 436

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 158

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 149

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 113

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 249