ask-sdkを参考にFactory / BuilderをTypeScriptでやってみた

聞いたことはあったけど、作ったことがなかったのでやってみました。TypeScript Advent Calendar 2018の未投稿日があったので、そこを埋める記事になればです。 Interface Builderの型 […]

広告ここから
広告ここまで

目次

    聞いたことはあったけど、作ったことがなかったのでやってみました。TypeScript Advent Calendar 2018の未投稿日があったので、そこを埋める記事になればです。

    Interface

    Builderの型を定義します。
    今回はTitleとTextをaddして、getItemでデータを取ってくるという簡単構造です。

    builder.ts

    export interface Response {
        title?: string,
        text?: string
    }
    export interface MyfirstBuilder {
        addTitle(title: string) : this
        addText(text: string): this
        getItem(): Response
    }

    factory.ts

    Interfaceを定義したので、実装します。

    import { MyfirstBuilder, Response } from './builder'
    
    export class MyFirstFactory {
        public static init(): MyfirstBuilder {
            const content: Response = {}
            return {
                addText(text: string): MyfirstBuilder {
                    content.text = text
                    return this
                },
                addTitle(title: string): MyfirstBuilder {
                    content.title = title
                    return this
                },
                getItems(): Response {
                    return content
                }
            }
        }
    }

    index.ts

    作ったので、使いましょう。

    import { MyFirstFactory } from './factory'
    
    const first = MyFirstFactory.init()
    first.addTitle('aaa')
    first.addText('bbb')
    console.log(first.getItem()))
    // { title: 'aaa', text: 'bbb' }
    
    const second = MyFirstFactory.init()
    console.log(second.addTitle('aaa').addText('bbb').getItem())
    // { title: 'aaa', text: 'bbb' }

    returnでthisを返してるので、メソッドチェーン形式で動かせてます。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark