设计模式

(二)设计模式 工厂模式(简单、工厂、抽象)

2021-05-28  本文已影响0人  科技猿人

设计模式代表了最佳的实践

引言

场景

1. 简单工厂模式

1.1 图示
简单工厂模式
1.2 代码示例
interface Color {
    fun paint()
}

class Red : Color {
    override fun paint() {
        println("Color Red::paint() method")
    }
}

class Green : Color {
    override fun paint() {
        println("Color Green::paint() method")
    }
}

class ColorFactory {
    fun getColor(colorType: String): Color? {
        return when (colorType) {
            "RED" -> {
                Red()
            }
            "GREEN" -> {
                Green()
            }
            else -> null
        }
    }
}

class FactoryColorDemo {
    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            val colorFactory = ColorFactory()

            //获取 Red 的对象,并调用它的 paint 方法
            val red = colorFactory.getColor("RED")
            red?.paint()

            //获取 Green 的对象,并调用它的 paint 方法
            val green = colorFactory.getColor("GREEN")
            green?.paint()
        }
    }
}
1.3 图示(简单工厂模式 增加产品)
简单工厂模式 增加产品
1.4 优缺点

2. 工厂模式

2.1 图示
工厂模式
2.2 代码示例
interface Color {
    fun paint()
}

class Red : Color {
    override fun paint() {
        println("Color Red::paint() method")
    }
}

class Green : Color {
    override fun paint() {
        println("Color Green::paint() method")
    }
}

interface ColorFactory {
    fun createColor(): Color
}

class RedColorFactory : ColorFactory {
    override fun createColor(): Color {
        return Red()
    }
}

class GreenColorFactory : ColorFactory {
    override fun createColor(): Color {
        return Green()
    }
}

class FactoryColorDemo {
    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            //获取 Red 的对象,并调用它的 paint 方法
            val redColorFactory = RedColorFactory()
            val red = redColorFactory.createColor()
            red.paint()

            //获取 Green 的对象,并调用它的 paint 方法
            val greenColorFactory = GreenColorFactory()
            val green = greenColorFactory.createColor()
            green.paint()
        }
    }
}
2.3 图示(工厂模式 增加产品)
工厂模式 增加产品
2.4 优缺点

3. 抽象工厂模式

3.1 图示
抽象工厂模式
3.2 代码示例
interface Color {
    fun paint()
}

class Red : Color {
    override fun paint() {
        println("Color Red::paint() method")
    }
}

class Green : Color {
    override fun paint() {
        println("Color Green::paint() method")
    }
}

interface Shape {
    fun draw()
}

class Rectangle : Shape {
    override fun draw() {
        println("Shape Rectangle::draw() method")
    }
}

class Circle : Shape {
    override fun draw() {
        println("Shape Circle::draw() method")
    }
}

interface LogoFactory {
    fun createColor(): Color
    fun createShape(): Shape
}

class HappyLogoFactory : LogoFactory {
    override fun createColor(): Color {
        return Red()
    }

    override fun createShape(): Shape {
        return Circle()
    }
}

class AngryLogoFactory : LogoFactory {
    override fun createColor(): Color {
        return Green()
    }

    override fun createShape(): Shape {
        return Rectangle()
    }
}

class FactoryColorDemo {
    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            //获取 喜庆Logo(灯笼红) 的对象
            val happyLogoFactory = HappyLogoFactory()
            val happyColor = happyLogoFactory.createColor()
            val happyShape = happyLogoFactory.createShape()
            happyColor.paint()
            happyShape.draw()

            //获取 愤怒Logo(弹幕绿) 的对象
            val angryLogoFactory = AngryLogoFactory()
            val angryColor = angryLogoFactory.createColor()
            val angryShape = angryLogoFactory.createShape()
            angryColor.paint()
            angryShape.draw()
        }
    }
}
3.3 图示(抽象工厂模式 增加产品)
抽象工厂模式 增加产品
3.4 图示(抽象工厂模式 增加工厂)
抽象工厂模式 增加工厂
3.5 图示(抽象工厂模式 概括总结)
抽象工厂模式 概括总结
3.6 优缺点

4. 小结

小编的博客系列

设计模式 全家桶

上一篇下一篇

猜你喜欢

热点阅读