建造者模式--Builder模式

将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。

使用场景:

相同的方法,不同的执行顺序,产生不同的事件结果

多个部分或零件,都可以装配到一个对象中,但是产生的运行结果又不相同

产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用

当初始化一个对象特别复杂,如参数多,切很多参数都具有默认值时

//: Playground - noun: a place where people can play


import UIKit


var str = "Hello, playground"

/*

 建造者模式

 

 */


///Product产品类----抽象产品类,

//子类必须设置操作系统

class Computer{


    var mboard:String!

    var mdesplay:String!

    var mOS:String!

    

    

    ///设置主板

    func setBoard(board:String){

        mboard = board

    }

    ///设置显示器

    func setDisplay(desplay:String){

        mdesplay = desplay

    }

    ///设置操作系统

    func setOS(){

        fatalError("子类必须实现--设置操作系统")

    }

    func debugString(){

        debugPrint(mboard + mdesplay + mOS)

    }

    

}


///产品类

class Mac: Computer {

    override func setOS() {

        mOS = "MAC-OS-X10.10"

    }

}

///Builder---抽象builder,规范产品的组建,一般由子类实现具体组建过程

protocol Builder{

    ///设置主机

    func buildBoard(board:String)

    ///设置显示器

    func buildDesplay(desplay:String)

    ///设置操作系统

    func buildeOS()

    ///创建产品

    func create()->Computer

    

}

///ConcreteBuilder--具体builder,实现具体组建过程

class MacBuilder: Builder {

    

    var computer:Computer = Mac()

 

    func create() -> Computer {

        return computer

    }

    func buildBoard(board: String) {

        computer.setBoard(board)

    }

    func buildDesplay(desplay: String) {

        computer.setDisplay(desplay)

    }

    func buildeOS() {

        computer.setOS()

    }

    

}

///Director---统一组装过程,构造computer,封装构建复杂产品对象的过程,对外隐藏构建细节

class Director {

    var mbuilder:Builder!

    init(builder:Builder){

        mbuilder = builder

    }

    ///构造computer

    func construct(board:String,display:String){

        mbuilder.buildBoard(board)

        mbuilder.buildDesplay(display)

        mbuilder.buildeOS()

    

    }

}

class Test {

    var builder:Builder = MacBuilder()

    func test(){

        let director = Director(builder: builder)

        ///不需要知道构建过程,细节

        director.construct("英特尔主板", display: "Retina显示器")

        debugPrint(builder.create().debugString())

    }

}

Test().test()










  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值