建材秒知道
登录
建材号 > 设计 > 正文

软件开发中常用的设计模式有哪些

勤奋的白云
踏实的盼望
2023-01-26 07:23:36

软件开发中常用的设计模式有哪些

最佳答案
俊秀的蜜蜂
苹果向日葵
2025-12-08 17:32:10

设计模式主要分三个类型:创建型、结构型和行为型。

其中创建型有:

一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点

二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。

三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。

五、Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

行为型有:

六、Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

七、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。

八、Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。

九、Command,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。

十、State,状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。

十一、Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。

十二、China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系

十三、Mediator,中介者模式:用一个中介对象封装一些列的对象交互。

十四、Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

十五、Interpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

十六、Memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

结构型有:

十七、Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。

十八、Facade,外观模式:为子系统中的一组接口提供一致的界面,fa?ade提供了一高层接口,这个接口使得子系统更容易使用。

十九、Proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问

二十、Adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。

二十一、Decrator,装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。

二十二、Bridge,桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。

二十三、Flyweight,享元模式

23种设计模式要在这里详细的都说一遍内容实在太多了啊,推荐你一本好书《软件秘笈:设计模式那点事》,里面讲解的23中设计模式例子很生动,容易理解,还有JDK中设计模式应用情况,看了收获挺大的!百度里面搜“设计模式”,第一条中设计模式百度百科中就有首推该图书,浏览量在20几万以上的,不会错的。

最新回答
坚强的火车
自然的热狗
2025-12-08 17:32:10

其中创建型有:

一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点

例如:随处可见,比如Servlet,sprigMVC创建时都是单例多线程的。

完美的实例是:private static Singleton instance = new Singleton()

创建线程的方式有很多种,但是很多都扛不住多线程的检验,上面是简单又实用的例子,多线程下也是安全的。

二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。

三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

例如:虽然简单工厂(静态工厂)没有进入23种设计模式,但是java web中的很多配置文件玩的还是它。

Spring中下面三种方式实例化bean:

1.使用类构造器实例化

<bean id="orderService" />

2.使用静态工厂方法实例化

<bean id="personService" factory-method="createOrder"/>

public class OrderFactory {

public static OrderServiceBean createOrder(){

return new OrderServiceBean()

}

}

3.使用实例工厂方法实例化:

<bean id="personServiceFactory" />

<bean id="personService" factory-bean="personServiceFactory" factory-method="createOrder"/>

public class OrderFactory {

public OrderServiceBean createOrder(){

return new OrderServiceBean()

}

}

第一种方法,IOC容易直接根据配置文件中的class属性通过反射创建一个实例,使用的是该类的默认构造方法。第二种则是调用class指定的工厂类的

工厂方法,来返回一个相应的bean实例,值得注意的是工厂类的方法是静态方法,所以不用产生工厂本身的实例。而第三种则不同,它除了配置与第二种相同

外,唯一的不同就是方法不是静态的,所以创建bean的实例对象时需要先生成工厂类的实例。实例了bean对象时,需要对其中的属性也进行赋值,这时就是经常被提及的依赖注入。

以上其实有错误:Spring很多情况下创建对象很定是反射呀,尤其是注解和DI(依赖注入),小朋友,想什么呢?肯定不是用new()来创建:

Class c = Class.forName("cn.itcast.OrderServiceBean")

Object bean = c.newInstance()

四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。

五、Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

行为型有:

六、Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

例如:jdk中的各种容器类的基础模式

七、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。

例如:据说是jdk使用最多的模式,好比邮件订阅或RSS订阅

八、Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。

九、Command,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。

十、State,状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。

十一、Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。

例如:comparator 比较器的实现利用了此模式

十二、China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系 。

此处强调一点就是,链接上的请求可以是一条链,可以是一个树,还可以是一个环,模式本身不约束这个,需要我们自己去实现,同时,在一个时刻,命令只允许由一个对象传给另一个对象,而不允许传给多个对象

例如:struts2 interceptor 用到的就是是责任链模式

十三、Mediator,中介者模式:用一个中介对象封装一些列的对象交互。

十四、Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

十五、Interpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

十六、Memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

结构型有:

十七、Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。

十八、Facade,外观模式:为子系统中的一组接口提供一致的界面,facade提供了一高层接口,这个接口使得子系统更容易使用。

十九、Proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问。

例如:经典的体现在Spring AOP切面中,Spring中利用了俩种代理类型。

其实,代理也分为静态和动态,但是我们一般常用动态,因为静态代理秀不起来

二十、Adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。

其中对象的适配器模式是各种结构型模式的起源,分为三种:类,对象,接口的适配器模式。

结一下三种适配器模式的应用场景:

类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。

对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。

接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。

例如:java io流中大量使用

二十一、Decrator,装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。

对比:适配器模式主要是为了接口的转换,而装饰者模式关注的是通过组合来动态的为被装饰者注入新的功能或行为(即所谓的责任)。

二十二、Bridge,桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。

二十三、Flyweight,享元模式:主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。

例如:数据库连接池便是这个原理

典雅的航空
痴情的悟空
2025-12-08 17:32:10
这个问题一两句话说不清楚,我斗胆说上一两句吧。仅供参考——

State 状态模式是行为模式的一种。允许一个对象在其内部状态改变时,改变它的行为。状态模式可以有效的替换充满在程序中的 if else、switch 语句:将不同条件下的行为封装在一个类里面,再给这些类一个统一的父类来约束他们。State模式重在强调对象内部状态的变化改变对象的行为。

Bridge 桥梁模式:GOF 在《设计模式》中给桥梁模式的定义为:将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象和实现不是通常认为的父类与子类、接口与实现类的关系,而是组合关系。也就是说,实现部分是被抽象部分调用,以用来完成(实现)抽象部分的功能。打个比方来说,“动物”是一种对猫、狗、麻雀、鸡、鸭、青蛙等的抽象,属于动物的移动行为则被抽象为“行走”,而行走又可以实现为“飞、跳、跑”等等具体的实现。桥梁模式的本意就是让一类可以变化的对象与它的可以变化的行为之间解耦,实现各自独立的变化。

按我的理解,两者封装的变化并不一样,状态模式封装的状态变化,使得状态变化与上下文(context)解耦,而桥梁模式则是分别封装对象的变化和对象的具体行为的变化,从而使得对象变化和对象行为变化之间不要产生组合爆炸!

动听的钢铁侠
疯狂的树叶
2025-12-08 17:32:10

正常情况下一个设计模式描述了一个被证实可行的方案。

这些方案非常普遍,是具有完整定义的最常用的模式。

IT培训http://www.kmbdqn.cn/认为一般模式有4个基本要素:模式名称(patternname)、问题(problem)、解决方案(solution)、效果(consequences)。

常见的Java设计模式有以下10种:1、桥梁模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

2、合成模式(Composite):将对象组合成树形结构以表示"部分-整体"的层次结构。

它使得客户对单个对象和复合对象的使用具有一致性。

3、抽象工厂模式(AbstractFactory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

4、装饰模式(Decorator):动态地给一个对象添加一些额外的职责。

就扩展功能而言,它能生成子类的方式更为灵活。

5、适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。

适配器模式使得原本由于接口或类不兼容而不能一起工作的类可以一起工作。

6、责任链模式(ChainofResponsibility):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。

将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

7、工厂方法(FactoryMethod):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。

FactoryMethod使一个类的实例化延迟到其子类。

8、建造模式(Builder):将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。

9、门面模式(Facade):为子系统中的一组接口提供一个一致的界面,门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

10、命令模式(Command):将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化对请求排队或记录请求日志,以及支持可取消的操作。

虚心的小天鹅
魁梧的蜡烛
2025-12-08 17:32:10
问题一:软件设计模式主要有哪几种 创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:

? 工厂方法模式(Factory Method Pattern)

? 抽象工厂模式(Abstract Factory Pattern)

? 建造者模式(Builder Pattern)

? 原型模式(Prototype Pattern)

? 单例模式(Singleton Pattern)

结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:

? 适配器模式(Adapter Pattern)

? 桥接模式(Bridge Pattern)

? 组合模式(posite Pattern)

? 装饰者模式(Decorator Pattern)

? 外观模式(Facade Pattern)

? 享元模式(Flyweight Pattern)

? 代理模式(Proxy Pattern)

行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:

? 责任链模式(Chain of Responsibility Pattern)

? 命令模式(mand Pattern)

? 解释器模式(Interpreter Pattern)

? 迭代器模式(Iterator Pattern)

 中介者模式(Mediator Pattern)

? 备忘录模式(Memento Pattern)

? 观察者模式(Observer Pattern)

? 状态模式(State Pattern)

? 策略模式(Strategy Pattern)

? 模板方法模式(Template Method Pattern)

? 访问者模式(Visitor Pattern)

问题二:软件开发的设计模式有哪些 最常用的是设计模式是工厂模式或者单例模式。

问题三:什么是软件设计模式 你好。

软件设计模式就是Uml统一建模语言的技巧性概念。主要研究各个类模块和接口之间的安排与搭配,也是为程序员提供亥流的一个很好的平台。

利用软件设计模式您可以做出质量更高,代码更少,扩充更容易的软件。我个人理解它更像是一个工具箱,可以让你生产出更漂亮、更简洁的代码。

我的回答您还满意吗?

问题四:常见的软件开发模式和设计模式有哪些 MVC

这个是JAVA ee中就经常用到的模式

将数据模型、界面视图和业务逻辑控制分开的模式在Android开发中体现的最明显

数据模型一定单独

界面视图在布局中实现

业务控制单独编写,典型的MVC

问题五:软件工程中的设计模式都有哪些 Builder模式:比如AlertDialog.Builder。

适配器模式:比如GridView、ListView与Adapter。

命令模式:比如Handler.post。

享元模式:比如Message.obtain。

单例模式:比如InputMethodManager.getInstance。

观察者模式:比如ContentObserver。

这是一些经常用到的设计模式以及举例。

问题六:列出几种软件开发中常见的设计模式并解释 设计模式主要分三个类型:创建型、结构型和行为型。

其中创建型有:

一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点

二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。

三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。

五、Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

行为型有:

六、Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

七、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。

八、Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。

九、mand,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。

十、State,状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。

十一、Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。

十二、China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系

十三、Mediator,中介者模式:用一个中介对象封装一些列的对象交互。

十四、Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

十五、Interpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

十六、Memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

结构型有:

十七、posite,组合模式:将对象组合成树形结构以表示部分整体的关系,posite使得用户对单个对象和组合对象的使用具有一致性。

十八、Facade,外观模式:为子系统中的一组接口提供一致的界面,fa?ade提供了一高层接口,这个接口使得子系统更容易使用。

十九、Proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问

二十、Adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。

二十一、Decrator,装饰顶式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。......>>

问题七:设计模式都有哪些? 设计模式主要分三个类型:创建型、结构型和行为型。

其中创建型有:

一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点

二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。

三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。

五、Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

行为型有:

六、Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

七、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。

八、Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。

九、mand,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。

十、State,状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。

十一、Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。

十二、China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系

十三、Mediator,中介者模式:用一个中介对象封装一些列的对象交互。

十四、Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

十五、Interpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

十六、Memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

结构型有:

十七、posite,组合模式:将对象组合成树形结构以表示部分整体的关系,posite使得用户对单个对象和组合对象的使用具有一致性。

十八、Facade,外观模式:为子系统中的一组接口提供一致的界面,fa?ade提供了一高层接口,这个接口使得子系统更容易使用。

十九、Proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问

二十、Adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。

二十一、Decrator,装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。

二十二、Bridge,桥模式:将抽......>>

问题八:总共有几种设计模式??? 共有23种

简单工厂是设计模式中比较简单的创建型模式

其原理就是创建一个工厂类(接口),客户端调用的为接口的实现类,来实现代码的复用与简单恭耦,其实简单工厂也是工厂方法模式的一种特殊实现。

推荐你看篇文章,你就会更好的理解。

blog.csdn/ai92/article/details/209198

问题九:软件设计模式的四个要素 设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。模式名称一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。问题描述问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。解决方案描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。效果描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。

问题十:有哪些比较好的设计模式 单例模式:这个是必须会的

观察者模式:这个最典型的应用就是mvc模式。

flyweight模式:这个也很常用

posite(组合):这个很常见吧,

适配器模式:这个也很常用,比如我们一般会封装一些类库。然后成为我们用起来更方便的类。

其它的还很多的。总共23种。设计模式需要边学边用。很多不好理解。等以后觉得自己设计思路不太好了可以再翻翻。