常用java设计模式
A. java中常用的设计模式有哪些请详细说明一下工厂模式。
一共23种设计模式!
引用《软件秘笈-设计模式那点事》书籍:
按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。
创建型模式用来处理对象的创建过程;结构型模式用来处理类或者对象的组合;行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。
创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:
工厂方法模式(Factory Method Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
单例模式(Singleton Pattern)
结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:
适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰者模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
策略模式(Strategy Pattern)
模板方法模式(Template Method Pattern)
访问者模式(Visitor Pattern)
抽象工厂模式(Abstract Factory Pattern)提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类。
抽象工厂模式允许客户使用抽象接口来创建一组相关的产品,客户类和工厂类分开,客户需要任何产品的时候,只需要向工厂请求即可,客户无须修改就可以获得新产品。这样一来,客户就从具体产品中解耦。
详情请参考书籍《软件秘笈:设计模式那点事》,里面讲解的23中设计模式例子很生动,容易理解,还有JDK中设计模式应用情况,看了收获挺大的!好东西大家一起分享!
祝你早日学会设计模式!
B. java设计模式都有哪些(java的设计模式有哪些)
一、创建型模式
1. 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。
2. 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
3. 建造者模式(Builder Pattern):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
4. 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
5. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。
二、结构型模式
1. 适配器模式(Adapter Pattern):允许将一个类的接口转换成客户期望的另一个接口。适配器模式使得原本接口不兼容的类可以一起工作。
2. 桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使它们都可以独立地变化。
3. 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使用户对单个对象和组合对象的使用具有一致性。
4. 装饰者模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。就增加新功能来说,装饰者模式比生成子类更为灵活。
5. 外观模式(Facade Pattern):提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
6. 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。
7. 代理模式(Proxy Pattern):为其他对象提供一个代理以控制对这个对象的访问。
三、行为型模式
1. 责任链模式(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
2. 命令模式(Command Pattern):将请求封装为一个对象,从而使用户可以使用不同的请求对客户端进行参数化。
3. 解释器模式(Interpreter Pattern):为语言创建解释器。解释器模式定义了文法的一个解释器,该解释器使用解释器模式将输入的句子翻译成抽象语法树,并加以解释。
4. 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露其内部的表示。
5. 中介者模式(Mediator Pattern):定义一个对象来封装一组对象之间的交互。中介者使各对象不需要显式地相互引用,从而降低它们之间的耦合。
6. 备忘录模式(Memento Pattern):捕获一个对象的内部状态,并在该对象之外保存这个状态,以便稍后恢复它。
7. 观察者模式(Observer Pattern):对象间的一对多依赖关系,当一个对象改变状态,所有依赖于它的对象都会得到通知并自动更新。
8. 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为。
9. 策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。
10. 模板方法模式(Template Method Pattern):在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中实现。
11. 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
《软件秘笈:设计模式那点事》是一本关于设计模式的好书,书中包含了23种设计模式的生动例子,易于理解。书中还介绍了JDK中设计模式的应用情况,对学习设计模式非常有帮助。网络搜索“设计模式”,第一条结果就是该书的介绍,浏览量超过20万,值得一读。
C. 简述JAVA的几种设计模式
JAVA编程中,设计模式的使用能够显着提升代码的复用性和可维护性。设计模式大致可以分为三种类型:创建型模式、结构型模式和行为型模式。其中,创建型模式涵盖了工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式,它们主要用于对象的创建过程,旨在减少对象创建的复杂性。
结构型模式则包括适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式和享元模式。这些模式专注于类和对象的组合方式,通过不同的方式将类和对象组合在一起,以实现更复杂的功能。
行为型模式则有策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。这些模式关注的是对象之间的交互和职责分配,以及在不同的场景下如何执行特定的行为。
具体来说,工厂方法模式提供了一种创建对象的方式,通过将对象的实例化过程延迟到子类中,使得子类可以根据需要选择合适的实现。抽象工厂模式则是工厂方法模式的进一步抽象,它提供了一种创建多个相关或依赖对象的接口,而无需指定它们具体的类。
单例模式确保一个类只有一个实例,并提供一个全局访问点。建造者模式则将一个复杂的对象的构建过程解耦,使得相同构建过程可以创建不同的对象表示。原型模式通过复制现有的对象来创建新的对象,而不需要知道其具体的类。
适配器模式通过转换接口来实现类的复用,使得原本不兼容的接口可以协同工作。装饰器模式则是在不改变对象结构的前提下,动态地给对象添加新的功能。代理模式提供了一种方法来控制对其他对象的访问,如远程代理、虚拟代理等。
外观模式为子系统提供了一个统一的接口,简化子系统的使用。桥接模式将抽象部分与实现部分分离,使它们可以独立变化。组合模式允许以树形结构表示对象的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
享元模式通过共享技术来有效地支持大量细粒度的对象。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互换。模板方法模式则定义了一个操作中的算法骨架,而将一些步骤延迟到子类中实现,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
观察者模式允许对象之间以一种松耦合的方式进行交互,一个对象的状态改变会自动通知所有依赖它的对象。迭代子模式则定义了一个用于访问聚合对象元素的接口,而不暴露其内部表示。责任链模式允许请求的发送者和接收者解耦,通过沿着处理者链传递请求,直到有一个处理者处理它为止。
命令模式将一个请求封装成一个对象,使得请求可以被参数化和队列化。备忘录模式允许一个对象在不破坏封装性的前提下保存和恢复其内部状态。状态模式允许对象在内部状态改变时改变其行为。访问者模式允许在不修改现有类的情况下向对象结构添加新的操作。
中介者模式定义了一个中介对象来简化原有对象之间的交互,而解释器模式则通过定义一个语言的文法,使得该语言可以被解释器执行。
D. Java中常用的设计模式有哪些请详细说明一下工厂模式。
1.单例模式(有的书上说叫单态模式其实都一样)
该模式主要目的是使内存中保持1个对象
2.工厂模式
该模式主要功能是统一提供实例对象的引用。看下面的例子:
public class Factory{
public ClassesDao getClassesDao(){
ClassesDao cd = new ClassesDaoImpl();
return cd;
}
}
interface ClassesDao{
public String getClassesName();
}
class ClassesDaoImpl implements ClassesDao {
public String getClassesName(){
System.out.println("A班");
}
}
class test
{
public static void main(String[] args){
Factory f = new Factory();
f.getClassesDao().getClassesName();
}
}
这个是最简单的例子了,就是通过工厂方法通过接口获取对象的引用
3.建造模式
该模式其实就是说,一个对象的组成可能有很多其他的对象一起组成的,比如说,一个对象的实现非常复杂,有很多的属性,而这些属性又是其他对象的引用,可能这些对象的引用又包括很多的对象引用。封装这些复杂性,就可以使用建造模式。
4.门面模式
这个模式个人感觉像是Service层的一个翻版。比如Dao我们定义了很多持久化方法,我们通过Service层将Dao的原子方法组成业务逻辑,再通过方法向上层提供服务。门面模式道理其实是一样的。
5.策略模式
这个模式是将行为的抽象,即当有几个类有相似的方法,将其中通用的部分都提取出来,从而使扩展更容易。
E. JAVA23种设计模式介绍以及应用场景
JAVA中的23种设计模式分为创建型、结构型和行为型三类,以下是它们的介绍及应用场景:
一、创建型模式
1. 单例模式 介绍:确保一个类只有一个实例,并提供一个全局访问点。 应用场景:适用于需要控制实例数量的类,如线程池、配置管理器等。
2. 工厂方法模式 介绍:定义一个创建对象的接口,但由子类决定实例化哪个类。 应用场景:适用于需要创建对象但不指定具体类的场景,如根据不同条件创建不同类型的对象。
3. 抽象工厂模式 介绍:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 应用场景:适用于需要创建多个相关对象的场景,且这些对象的创建具有相关性或约束性。
4. 建造者模式 介绍:将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 应用场景:适用于需要逐步构建复杂对象的场景,如生成具有多种属性的对象。
5. 原型模式 介绍:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 应用场景:适用于需要创建大量相似对象的场景,且对象的创建开销较大。
二、结构型模式
1. 适配器模式 介绍:将一个类的接口转换成客户希望的另外一个接口,使原本不兼容的类可以一起工作。 应用场景:适用于需要将一个类的接口转换为另一个不兼容接口的场景。
2. 代理模式 介绍:为其他对象提供一种代理以控制对这个对象的访问。 应用场景:适用于需要控制对对象的访问、实现远程调用或延迟加载等场景。
3. 装饰器模式 介绍:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活。 应用场景:适用于需要在不修改原有类代码的情况下,为对象添加额外功能的场景。
4. 桥接模式 介绍:将抽象部分与实现部分分离,使它们都可以独立地变化。 应用场景:适用于抽象和实现之间需要独立变化的场景,如多种抽象类对应多种实现类。
5. 外观模式 介绍:提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。 应用场景:适用于需要将复杂系统的接口简化,以便客户端使用的场景。
6. 享元模式 介绍:运用共享技术有效地支持大量细粒度的对象。 应用场景:适用于需要创建大量相同或相似对象的场景,且这些对象的存储开销较大。
7. 组合模式 介绍:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 应用场景:适用于需要表示对象之间“部分整体”关系的场景,如文件系统、组织结构等。
三、行为型模式
1. 策略模式 介绍:定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。本模式使得算法可独立于使用它的客户而变化。 应用场景:适用于需要在运行时根据条件选择不同算法的场景。
2. 命令模式 介绍:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化、对请求排队或记录请求日志,以及支持可撤销的操作。 应用场景:适用于需要将请求封装为对象的场景,如实现宏命令、撤销/重做功能等。
3. 观察者模式 介绍:定义对象间的一种一对多的依赖关系,当一个对象改变状态时,其所有依赖者都会收到通知并自动更新。 应用场景:适用于需要在对象状态改变时通知其他对象的场景,如事件监听、消息发布/订阅等。
4. 中介者模式 介绍:用一个中介对象来封装一系列对象的交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 应用场景:适用于对象之间存在大量交互的场景,如聊天室、交通管理系统等。
5. 迭代器模式 介绍:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。 应用场景:适用于需要遍历集合对象的场景,如数组、列表、树等数据结构。
6. 模板方法模式 介绍:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 应用场景:适用于需要在父类中定义算法骨架,而在子类中实现具体步骤的场景。
7. 状态模式 介绍:允许对象在内部状态改变时改变它的行为,对象看起来似乎改变了它的类。 应用场景:适用于需要根据对象状态改变行为的场景,如有限状态机、工作流管理等。
8. 职责链模式 介绍:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 应用场景:适用于需要将请求沿着处理链传递,直到被某个对象处理的场景,如事件处理、权限校验等。
9. 访问者模式 介绍:表示一个作用于某对象结构中的各元素的操作。它使你可以在不修改各元素的类的前提下定义作用于这些元素的新操作。 应用场景:适用于需要对对象结构中的元素进行不同操作,且这些操作需要动态扩展的场景。
10. 备忘录模式 介绍:在不破坏封装性的前提下,捕获并恢复对象的内部状态。 应用场景:适用于需要保存和恢复对象状态的场景,如撤销/重做功能、历史记录等。
了解这些设计模式的原理,并根据具体业务场景正确选择与应用它们,能显着提升软件开发的效率与质量。