Golang设计模式之模板模式

Jackey Golang 37 次浏览 , , 没有评论

创建文件Downloader.go

package template

import "fmt"

type Downloader interface {
    Download(url string)
}

type template struct {
    implement
    url string
}

type implement interface {
    download()
    save()
}

func NewTemplate(impl implement) *template {
    return &template{impl, ""}
}

func (t *template) Download(url string) {
    fmt.Println("模板下载start")
    t.url = url
    t.implement.download()
    t.implement.save()
    fmt.Println("模板下载end")
}

func (t *template) save() {
    fmt.Println("模板下载保存")
    t.implement.save()
}

创建文件HttpDown.go

package template

import "fmt"

type HttpDownload struct {
    *template
}

func NewHttpDownload() Downloader {
    downloader := &HttpDownload{}
    template := NewTemplate(downloader)
    downloader.template = template
    return downloader
}

func (hd *HttpDownload) download() {
    fmt.Printf("http down %s \n", hd.url)
}

func (hd *HttpDownload) save() {
    fmt.Printf("http save \n")
}

创建文件FtpDown.go

package template

import "fmt"

type FtpDownload struct {
    *template
}

func NewFtpDownload() Downloader {
    downloader := &FtpDownload{}
    template := NewTemplate(downloader)
    downloader.template = template
    return downloader
}

func (fd *FtpDownload) download() {
    fmt.Printf("ftp down %s \n", fd.url)
}

func (fd *FtpDownload) save() {
    fmt.Printf("ftp save \n")
}

main.go

package main

import "ssp_api_go/test/design/template"

func main() {
    var downloader template.Downloader = template.NewHttpDownload()
    downloader.Download("https://ijackey.com")
    var downloader2 template.Downloader = template.NewFtpDownload()
    downloader2.Download("https://ijackey.com")
}

 

发表评论

邮箱地址不会被公开。 必填项已用*标注

Go