设计模式三:建造者模式
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()
}
}
个人理解还是 将构造复杂对象的过程和组成对象的部件解耦