美文网首页收藏设计模式
Android设计模式:组合模式

Android设计模式:组合模式

作者: 搬码人 | 来源:发表于2022-01-13 22:11 被阅读0次

组合模式

作用:把一组相似的对象当作一个单一的对象,为的是减少数据类型。

背景描述

快递服务,将全国省市区进行划分。

行政区的划分有三级至五级不等
组织这样一个目录,供客户选择
如果每级区划分使用一个类,需要五个类,太复杂
希望能简化

image.png

图形设计

实现步骤:
1、定义一个抽象对象,它可以表示两种或多种实际类型的对象
2、在对象内部,聚合一个抽象类型对象
3、构造时,递归这种联系
4、适合构造树形结构的对象关系

image.png

代码实例

/**
 *@Description
 *@Author PC
 *@QQ 1578684787
 */
abstract class Node(open var name:String) {
    abstract fun getChildren():List<Node>?

}
package 设计模式8

/**
 *@Description
 *@Author PC
 *@QQ 1578684787
 */
class DistrictNode(override var name:String):Node(name) {
    private var children:MutableList<Node> = ArrayList()
    override fun getChildren(): List<Node> {
        return children
    }
    fun addChildren(node: Node){
        children.add(node)
    }
    fun deleteChild(num:Int){
        children.removeAt(num)
    }

    override fun toString(): String {
        return name+children
    }
}
package 设计模式8

/**
 *@Description
 *@Author PC
 *@QQ 1578684787
 */
class LeafNode(override var name:String):Node(name) {
    override fun getChildren(): List<Node>? {
        return null
    }

    override fun toString(): String {
        return name
    }
}
package 设计模式8

/**
 *@Description
 *@Author PC
 *@QQ 1578684787
 */
fun main() {
    //根目录
    val root = DistrictNode("根")

    //一级目录
    root.addChildren(DistrictNode("上海"))
    root.addChildren(DistrictNode("天津"))
    val districtNode = DistrictNode("北京")
    root.addChildren(districtNode)

    //二级目录
    districtNode.addChildren(DistrictNode("海淀区"))
    districtNode.addChildren(DistrictNode("西城区"))
    val  districtNode2 = DistrictNode("朝阳区")
    districtNode.addChildren(districtNode2)

    //三级目录
    districtNode2.addChildren(LeafNode("三里屯"))
    districtNode2.addChildren(LeafNode("朝阳外街"))


    println(root)

}

测试结果


image.png

应用场景

  • 表示对象的部分-整体层次结构时。
  • 从一个整体中能独立出部分模块或功能时。
    Android中的应用: ViewGroup和View就是典型的组合实例。

优点

  • 高层模块(客户端)调用简单。局部和整体都是同样的结构,客户端无需关心是局部还是整体。
  • 新增节点容易。无需对现有类库进行任何更改,符合开闭原则。

缺点

  • 不同的组合模式实现有不同的缺点,具体看上面的分析。

相关文章

网友评论

    本文标题:Android设计模式:组合模式

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