- 博客(48)
- 收藏
- 关注
转载 【23】种设计模式全面解析(超级详细)
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。这 23 种设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性,以及类的关联.
2021-11-01 22:00:14 3158
转载 46 一句话归纳设计模式
通过《23种设计模式全面解析》教程,我们已经学习完了经典的 23 种设计模式。下面总结一下这 23 种设计模式,以方便小伙伴们日后复习和查阅。分类 设计模式 简述 一句话归纳 目的 生活案例 创建型设计模式 (简单来说就是用来创建对象的) 工厂模式(Factory Pattern) 不同条件下创建不同实例 产品标准化,生产更高效 封装创建细节 实体工厂 单例模式(Singleton Pattern) 保证一个类仅有一个.
2021-11-06 09:28:16 393
转载 45 行为型模式应用实验
行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化,它是 GoF设计模式中最为庞大的一类模式,包含以下 11 种:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器.
2021-11-06 09:28:13 449
转载 44 解释器模式(详解版)
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这
2021-11-06 09:28:10 379
转载 43 备忘录模式(详解版)
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中
2021-11-05 09:45:09 350
转载 42 访问者模式(Visitor模式)详解
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在现实生活中,有些集合对象存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多
2021-11-05 09:29:05 1855
转载 41 迭代器模式(详解版)
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表
2021-11-05 09:29:01 338
转载 40 中介者模式(详解版)
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须
2021-11-05 09:28:58 416
转载 39 观察者模式(Observer模式)详解
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生
2021-11-05 09:28:54 962
转载 38 状态模式(详解版)
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而
2021-11-05 09:28:51 628
转载 37 责任链模式(职责链模式)详解
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批
2021-11-05 09:28:48 660
转载 36 命令模式(详解版)
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在软件开发系统中,“方法的请求者”与“方法的实现者”之间经常存在紧密的耦合关系,这不利于软件功能的扩展与维护
2021-11-05 09:28:44 435
转载 35 策略模式(策略设计模式)详解
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车.
2021-11-05 09:28:38 600
转载 34 模板方法模式(模板方法设计模式)详解
行为型模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步
2021-11-05 09:28:35 646
转载 00 GoF 的 23 种设计模式的分类和功能
设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分。1. 根据目的来分根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式3 种。创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式:..
2021-11-04 15:37:27 81
转载 33 行为型模式概述(行为型模式的分类)
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。行为型模式是 GoF中最为庞大的一类,它包含以下 11 种模式。模板方法(Template Method)模式:定义一个操作中的算法..
2021-11-04 10:28:32 568
转载 32 结构型模式应用实验
结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木, 可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式,也可分为 代理模式(Proxy)、 适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator )、外观模式(Facade) 、享元模式(Flyweight)和 组合模式(Composite)等 7 类。实验目的本实验的主要目的如下。了解 7 种.
2021-11-04 07:55:24 432
转载 31 组合模式(详解版)
结构型模式: 代理模式(Proxy)、 适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator )、外观模式(Facade) 、享元模式(Flyweight)、组合模式(Composite)在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜、以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对...
2021-11-04 07:55:23 631
转载 30 享元模式(详解版)
结构型模式: 代理模式(Proxy)、 适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator )、外观模式(Facade) 、享元模式(Flyweight)、组合模式(Composite)在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有...
2021-11-04 07:55:21 381
转载 29 外观模式(Facade模式)详解
结构型模式: 代理模式(Proxy)、 适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator )、外观模式(Facade) 、享元模式(Flyweight)、组合模式(Composite)在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客...
2021-11-04 07:55:19 482
转载 28 装饰器模式(装饰设计模式)详解
结构型模式: 代理模式(Proxy)、 适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator )、外观模式(Facade) 、享元模式(Flyweight)、组合模式(Composite)上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如...
2021-11-04 07:55:17 588
转载 27 桥接模式(Bridge模式)详解
结构型模式: 代理模式(Proxy)、 适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator )、外观模式(Facade) 、享元模式(Flyweight)、组合模式(Composite)在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。当...
2021-11-04 07:55:15 1231
转载 26 适配器模式(Adapter模式)详解
结构型模式: 代理模式(Proxy)、 适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator )、外观模式(Facade) 、享元模式(Flyweight)、组合模式(Composite)在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可...
2021-11-04 07:55:00 578
转载 25 代理模式(代理设计模式)详解
结构型模式: 代理模式(Proxy)、 适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator )、外观模式(Facade) 、享元模式(Flyweight)、组合模式(Composite)在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中...
2021-11-04 07:54:43 565
转载 24 结构型模式概述(结构型模式的分类)
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。结构型模式分为以下 7 种:代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。 适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个
2021-11-03 22:28:35 551
转载 23 创建型模式应用实验
创建型模式(Creational Pattern)的主要特点是将对象的创建与使用分离,根据对象的创建与组合方式的不同,创建型模式可分为 单例(Singleton)模式、原型(Prototype)模式、工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式和建造者(Builder)模式 5 种。本实验的主要目的如下。了解 5 种“创建型模式”的定义、特点和工作原理。 理解 5 种“创建型模式”的结构、实现和应用场景。 学会应用 5 种“创建型模式”进行软件开
2021-11-03 16:56:08 486
转载 22 建造者模式(Bulider模式)详解
创建型模式:单例(Singleton)模式、原型(Prototype)模式、工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式和建造者(Builder)模式在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后.
2021-11-03 16:55:51 592
转载 21 抽象工厂模式(详解版)
创建型模式:单例(Singleton)模式、原型(Prototype)模式、工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式和建造者(Builder)模式前面介绍的 工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。同种类称为同等级,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电...
2021-11-03 16:55:25 1071
转载 20 工厂方法模式(详解版)
在现实生活中社会分工越来越细,越来越专业化。各种产品有专门的工厂生产,彻底告别了自给自足的小农经济时代,这大大缩短了产品的生产周期,提高了生产效率。同样,在软件开发中能否做到软件对象的生产和使用相分离呢?能否在满足“开闭原则”的前提下,客户随意增删或改变对软件相关对象的使用呢?这就是本节要讨论的问题。在简单工厂模式 一节我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。优.
2021-11-03 16:53:49 774
转载 19 简单工厂模式
创建型模式:单例(Singleton)模式、原型(Prototype)模式、工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式和建造者(Builder)模式现实生活中,原始社会自给自足(没有工厂),农耕社会小作坊(简单工厂,民间酒坊),工业革命流水线(工厂方法,自产自销),现代产业链代工厂(抽象工厂,富士康)。我们的项目代码同样是由简到繁一步一步迭代而来的,但对于调用者来说,却越来越简单。在日常开发中,凡是需要生成复杂对象的地方,都可以尝试考虑使用工厂.
2021-11-03 16:52:19 488
转载 18 原型模式(原型设计模式)详解
创建型模式:单例(Singleton)模式、原型(Prototype)模式、工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式和建造者(Builder)模式在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。原型模式的定义与特点原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象.
2021-11-03 16:51:42 665
转载 17 单例模式(单例设计模式)详解
在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。单例模式的定义与特点单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程
2021-11-03 16:51:03 683
转载 16 创建型模式概述
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。就像我们去商场购买商品时,不需要知道商品是怎么生产出来一样,因为它们由专门的厂商生产。创建型模式分为以下几种。单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例
2021-11-03 16:49:05 390
转载 15 一句话总结软件设计七大原则
开闭、里氏替换、依赖倒置、单一职责、接口隔离、迪米特、合成复用结合前几节的内容,我们一共介绍了 7 种设计原则,它们分别为开闭原则、里氏替换原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则和合成复用原则。这 7 种设计原则是软件设计模式必须尽量遵循的原则,是设计模式的基础。在实际开发过程中,并不是一定要求所有代码都遵循设计原则,而是要综合考虑人力、时间、成本、质量,不刻意追求完美,要在适当的场景遵循设计原则。这体现的是一种平衡取舍,可以帮助我们设计出更加优雅的代码结构。各种原则要求的侧重点
2021-11-02 11:52:46 358
转载 14 合成复用原则——面向对象设计原则
开闭、里氏替换、依赖倒置、单一职责、接口隔离、迪米特、合成复用合成复用原则是面向对象设计原则的 7 条原则中剩下的最后一条,下面我们将对其进行详细地介绍。合成复用原则的定义合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。如果要使用继承关系,则必须严格遵循里氏替换原则。
2021-11-02 11:52:17 340
转载 13 迪米特法则——面向对象设计原则
开闭、里氏替换、依赖倒置、单一职责、接口隔离、迪米特、合成复用前几节分别详细介绍了面向对象设计原则中的开闭原则、里氏替换原则、依赖倒置原则、单一职责原则和接口隔离原则,本节将详细介绍迪米特法则。迪米特法则的定义迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Hol
2021-11-02 11:52:07 389
转载 12 接口隔离原则——面向对象设计原则
开闭、里氏替换、依赖倒置、单一职责、接口隔离、迪米特、合成复用面向对象设计原则除了开闭原则、里氏替换原则、依赖倒置原则和单一职责原则以外,还有接口隔离原则、迪米特法则和合成复用原则。本节将详细介绍接口隔离原则。接口隔离原则的定义接口隔离原则(Interface Segregation Principle,ISP)要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。2002 年罗伯特·C.马丁给“接口隔离原则”的定义是:客户端不应该被迫依赖于它不使用的方法(
2021-11-02 11:52:04 397
转载 11 单一职责原则——面向对象设计原则
单一职责原则也是面向对象设计原则中的一条,下面我们就来详细地对其进行介绍。单一职责原则的定义单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a cl
2021-11-02 11:31:21 329
转载 02 UML统一建模语言
UML(Unified Modeling Language,统一建模语言)是用来设计软件蓝图的可视化建模语言,是一种为面向对象系统的产品进行说明、可视化和编制文档的标准语言,独立于任何一种具体的程序设计语言。1997 年 UML 被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标准。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。应用场景UML 能为软件开发的所有阶段提供模型化和可视化支持。而且融入了软件工程领域的新思想、新方法和新技术,使软件设计人员沟通更简明,进一步缩
2021-11-02 10:20:39 411
转载 10 依赖倒置原则——面向对象设计原则
前两节我们详细介绍了面向对象设计原则中的《开闭原则》和《里氏替换原则》,在本节中我们来介绍依赖倒置原则。依赖倒置原则的定义依赖倒置原则(Dependence Inversion Principle,DIP)是 Object Mentor 公司总裁罗伯特·马丁(Robert C.Martin)于 1996 年在C++Report 上发表的文章。依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules..
2021-11-01 22:53:31 445
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人