设计模式三:建造者模式

2021-05-25  本文已影响0人  程一刀

建造者模式: 将构造复杂对象的过程和组成对象的部件解耦,可分为抽象建造者,具体建造者,指导者,产品

代码如下:


//抽象产品 媒体
class Media  {
    func add(item: MediaItem) {
    }
}

//具体产品 书籍
class Book: Media {}
//具体产品 杂志
class Magazine: Media {}
//具体产品 网站
class WebSite: Media {}

// 产品元素
class MediaItem {
    private var s:String
    init(s: String) {
        self.s = s
    }
}
class Chapter: MediaItem {
    override init(s: String) {
        super.init(s: s)
    }
}
class Article :MediaItem {
    override init(s: String) {
        super.init(s: s)
    }
}

class WebItem: MediaItem {
    override init(s: String) {
        super.init(s: s)
    }
}

//抽象建造者
class MediaBuidler {
    // 以下2步 可以看作 构造复杂对象的 多个步骤(虽然只写了1个)
    func buildBase() {
        
    }
    func addMediaItem(item: MediaItem) {
        
    }
    func getFinishMedia() -> Media? {
        return nil
    }
}

//具体建造者
class BookBuidler: MediaBuidler {
    var book: Book?
    override func buildBase() {
        self.book = Book()
    }
    override func addMediaItem(item: MediaItem) {
        self.book?.add(item: item)
    }
    override func getFinishMedia() -> Media? {
        return self.book
    }
}

class WebSiteBuidler: MediaBuidler {
    var website: WebSite?
    override func buildBase() {
        self.website = WebSite()
    }
    override func addMediaItem(item: MediaItem) {
        self.website?.add(item: item)
    }
    override func getFinishMedia() -> Media? {
        return self.website
    }
}

class MagazinBuidler: MediaBuidler {
    var magazine: Magazine?
    override func buildBase() {
        self.magazine = Magazine()
    }
    override func addMediaItem(item: MediaItem) {
        self.magazine?.add(item: item)
    }
    override func getFinishMedia() -> Media? {
        return self.magazine
    }
}

/// 指导者
class MediaDirector {
    var mb: MagazinBuidler
    init(mb: MagazinBuidler) {
        self.mb = mb
    }
    func produceMedia(list: [MediaItem]) -> Media?{
        self.mb.buildBase()
        for (item) in list {
            self.mb.addMediaItem(item: item)
        }
        return self.mb.getFinishMedia()
    }
}


个人理解还是 将构造复杂对象的过程和组成对象的部件解耦

上一篇 下一篇

猜你喜欢

热点阅读