美文网首页
Swift设计模式:3.抽象工厂方法模式

Swift设计模式:3.抽象工厂方法模式

作者: 爱抽烟的芭比 | 来源:发表于2017-08-17 22:24 被阅读411次

抽象工厂方法模式(Abstract Factory Pattern)

一.什么是抽象工厂方法模式:

为创建一组相关或互相依赖的对象提供一个接口,而且无需指定它们的具体类。

二.抽象工厂方法模式的优点:

1.封装性:每个产品的实现类不是高层模块要关心的。它不关心对象是如何创建出来的,这些是由工厂类负责的。
2.产品族类的约束为非公开的。

三.抽象工厂模式的使用场景:

1.编译器无法定义创建对象类
2.类可以让其子类决定在运行期具体实例化的对象
3.封装一组相互关联的类的创建

四.Swift实现抽象工厂方法模式:

产品类:


protocol HumanColor {
    func getColor()
}


protocol HumanSex {
    func getSex()
}

protocol Human : HumanSex,HumanColor {
    
}

//黑人
class BlackHuman : Human {
    func getColor() {
        print("Black")
    }
    func getSex(){
        
    }
}

//男性黑人
class BlackMan: BlackHuman {
    override func getSex() {
        print("BlackMan")
    }
}

//女性黑人
class BlackFeman: BlackHuman {
    override func getSex() {
        print("BlackFeman")
    }
}

class WhiteHuman : Human {
    func getColor() {
        print("White")
    }
    
    func getSex() {
        
    }
}

class WhiteMan: WhiteHuman {
    override func getSex() {
        print("WhiteMan")
    }
}

class WhiteFeman: WhiteHuman {
    override func getSex() {
        print("WhiteFeman")
    }
}

class YellowHuman : Human {
    func getColor() {
        print("Yellow")
    }
    func getSex() {
    
    }
}

class YellowMan: YellowHuman {
   override func getSex() {
        print("YellowMan")
    }
}

class YellowFeman: YellowHuman {
   override func getSex() {
        print("YellowFeman")
    }
}

不管是黑人,白人还是黄种人,它们都有男人和女人。那么,在造人的时候就要分别造出男人和女人。
工厂类:

enum HumanType {
    case man
    case feman
}

class HumanFactory {
    
    func CreateBlackHuman() -> Human?  {
        return nil
    }
    
    func CreateWhiteHuman()-> Human? {
        return nil
    }
    func CreateYellowHuman() -> Human? {
        return nil
    }
    
    static func makeHumanFactory(type:HumanType) -> HumanFactory {
        
        switch type {
        case .man:
            return ManFactory()
        case .feman:
            return FemanFactory()
        }
    }
}

fileprivate class ManFactory : HumanFactory
{
    override func CreateBlackHuman() -> Human? {
        return BlackMan()
    }
    
    override func CreateWhiteHuman()-> Human? {
        return WhiteMan()
    }
    override func CreateYellowHuman() -> Human? {
        return YellowMan()
    }
}

fileprivate class FemanFactory : HumanFactory
{
    override func CreateBlackHuman() -> Human? {
        return BlackFeman()
    }
    
    override func CreateWhiteHuman() -> Human? {
        return WhiteFeman()
    }
    override func CreateYellowHuman() -> Human? {
        return YellowFeman()
    }
    
}

创建两个工厂类,分别建造男人和女人。抽象工厂类只需要根据参数返回这两个工厂类即可。
调用:

let fac =  HumanFactory.makeHumanFactory(type: .man)
        var human = fac.CreateBlackHuman()
        human?.getColor()
        human?.getSex()
        
        human = fac.CreateWhiteHuman()
        human?.getSex()
        human?.getColor()
        
        human = fac.CreateYellowHuman()
        human?.getSex()
        human?.getColor()

demo地址:Abstract Factory Method Pattern

相关文章

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 【重温设计模式】工厂设计模式

    一.介绍 工厂设计模式的分类 1.简单工厂模式2.工厂方法模式3.抽象工厂模式 工厂设计模式在工作中的应用 1.s...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 工厂模式

    本章内容 1. 简单工厂模式(也叫静态工厂模式),2.工厂方法模式,3.抽象工厂模式特别建议大家可以敲下设计模式的...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 38种Javascript设计模式

    38种设计模式 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 4.建造者模式 5.原型模式 6.单例模式 ...

  • 设计模式[3]-抽象工厂模式-Abstract Factory

    1.抽象工厂模式介绍 抽象工厂模式是创建型设计模式,可以创建一组对象。与工厂方法模式相比,抽象工厂模式中的具体工厂...

  • C++ 常见设计模式

    C++ 常见设计模式包括: 工厂模式 简单工厂模式定义工厂创建类,抽象产品,派生产品类 工厂方法模式 抽象工厂模式...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

网友评论

      本文标题:Swift设计模式:3.抽象工厂方法模式

      本文链接:https://www.haomeiwen.com/subject/wpanrxtx.html