讲故事,学(Java)设计模式—工厂模式 - ImportNew
- 格式:pdf
- 大小:82.91 KB
- 文档页数:2
java最常用的六种设计模式及举例设计模式是在软件开发过程中经验总结的一种编码和设计方式,它们可以帮助我们更好地组织代码,提高代码的可维护性和可复用性。
下面是 Java 中最常用的六种设计模式及其举例:1. 单例模式:单例模式确保一个类只有一个实例,并提供一个全局访问点。
典型的例子是 `ng.Runtime` 类,在整个 JVM 中只有一个运行时实例。
2. 工厂模式:工厂模式通过一个工厂类来创建其他类的对象,将对象的创建和使用分离,降低了代码的耦合度。
比如,`java.util.Calendar` 类使用了工厂模式来创建 `Calendar` 对象,其中的 `getInstance()` 方法返回一个 `Calendar` 实例。
3. 观察者模式:观察者模式定义了对象之间的一对多的依赖关系,当一个对象状态发生改变时,其相关依赖对象会收到通知并自动更新。
一个典型的例子是使用 `java.util.Observable` 类和 `java.util.Observer`接口进行监听和通知。
4. 装饰者模式:装饰者模式通过动态地将新功能附加到对象上,为对象提供了灵活的扩展方式,不需要修改原始对象的结构。
比如,`java.io` 包中的各种装饰者类可以用来扩展输入输出功能。
5. 策略模式:策略模式定义了一组算法,并将每个算法封装到可互换的对象中,使得算法的变化不会影响到使用算法的客户端。
一个常见的例子是使用 `parator` 接口来实现不同的比较策略。
6. 适配器模式:适配器模式将一个类的接口转换成客户端所期望的另一个接口,使得原本不兼容的类可以一起工作。
比如,`java.util.Arrays` 类中的 `asList()` 方法返回的是一个适配器,可以将数组转换成 List。
通过学习这些设计模式,我们可以更好地组织和设计代码,提高代码的可读性和可维护性。
在实际的开发中,我们可以针对具体的需求选择合适的设计模式,并根据需要进行一定的修改和定制。
java设计模式知识点总结设计模式是指在软件开发过程中,针对特定问题的解决方案的重复使用和标准化的总结。
在Java语言中,有许多常用的设计模式,为了帮助开发人员提高代码的复用性、可维护性和可扩展性,学习和掌握这些设计模式非常重要。
下面是对一些常见的Java设计模式的知识点进行总结。
一、创建型模式1. 单例模式(Singleton)单例模式确保一个类只有一个实例,并提供一个全局访问点。
在Java中,可通过私有构造方法、静态方法和静态变量实现单例模式。
2. 工厂模式(Factory)工厂模式使用工厂方法创建对象,而不是通过直接调用构造函数。
这样可以实现客户端代码与具体对象的解耦。
3. 抽象工厂模式(Abstract Factory)抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。
4. 建造者模式(Builder)建造者模式将一个复杂对象的构建与其表现分离,使相同的构建过程可以创建不同的表示。
5. 原型模式(Prototype)原型模式通过复制现有对象来创建新的对象,从而避免了使用构造函数创建新对象的开销。
二、结构型模式1. 适配器模式(Adapter)适配器模式将一个类的接口转换成客户端所期望的另一个接口,从而兼容不同接口之间的协作。
2. 桥接模式(Bridge)桥接模式将抽象部分和实现部分分离,使它们可以独立变化。
通过组合的方式取代继承,避免类的爆炸性增长。
3. 装饰器模式(Decorator)装饰器模式动态地将责任附加到对象上。
通过创建包装对象来扩展原始对象的功能。
4. 组合模式(Composite)组合模式将对象组合成树状结构,以表示“整体-部分”的层次结构。
通过统一对待单个对象和组合对象,简化了代码的复杂性。
5. 外观模式(Facade)外观模式提供了一个统一的接口,用于访问子系统中的一群接口。
通过简化客户端与子系统之间的交互,提高了系统的易用性。
三、行为型模式1. 策略模式(Strategy)策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。
Java中的设计模式Java是一种强大的编程语言,用于在各种应用程序中编写代码。
在编写Java代码时,使用设计模式可以使程序更加可维护、可扩展和可重用。
设计模式是解决软件设计问题的最佳实践,它们通常被分类为创建型、结构性和行为性三种类型。
下面我们将分别介绍这三种类型的设计模式。
创建型设计模式创建型设计模式用于在对象创建时进行控制和管理,这通常涉及到如何创建实例、组装对象以及隐藏对象的创建细节。
以下是常见的创建型设计模式。
工厂模式:将对象的创建委托给一个工厂类,以避免在代码中直接使用new操作符。
工厂模式可以减少代码的依赖性,并增强代码的灵活性。
抽象工厂模式:抽象工厂模式是一种工厂模式的扩展,它涉及到创建一系列相关的对象。
它使用一个抽象的工厂类来创建一组具体的工厂类,这些具体的工厂类可以创建一系列相关的对象。
建造者模式:建造者模式用于创建复杂对象,它将对象的构建和表示解耦,使得同样的构建过程可以使用不同的表示方式。
单例模式:单例模式用于确保一个特定的对象只存在一个实例。
它通常在整个应用程序中使用,以确保某些资源的唯一性,例如数据库连接池、线程池等。
结构型设计模式结构型设计模式用于创建更加复杂的软件组件,将对象以一种有意义的方式组织在一起。
以下是常见的结构型设计模式。
适配器模式:适配器模式用于在不能直接使用某个组件的情况下,为该组件提供一个中间层。
适配器模式可以将组件之间的接口兼容起来,使它们可以彼此协作。
桥接模式:桥接模式将抽象部分与实现部分分离,以便它们可以独立发展。
这样的分离使得构建更加灵活,减少了代码的复杂度。
装饰者模式:装饰者模式通过为对象动态添加新的功能,同时保持对象接口的完整性。
这种模式常用于当需要增加一个对象的功能时,不希望修改已有的代码,可以使用装饰者模式来实现。
代理模式:代理模式提供了一种代理机制,以便控制对一个对象的访问,这可以用于安全、性能、远程等方面的管理。
行为型设计模式行为型设计模式用于描述对象之间的合作方式,以便它们可以更好地协作来实现某些任务。
Java中的常见的设计模式总结1. 你所知道的设计模式有哪些Java 中一般认为有23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。
下面列出了所有的设计模式。
需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。
总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
2. 单例设计模式最好理解的一种设计模式,分为懒汉式和饿汉式饿汉式:public class Singleton{//直接创建对象public static Singleton instance = newSingleton();//私有化构造函数private Singleton(){}//返回对象实例public static Singleton getInstance(){return instance;}}懒汉式:public class Singleton{//声明变量private static volatile Singleton singleton = null;//私有构造函数private Singleton(){}//提供对外方法public static Singleton getInstance(){if(singleton == null){synchronized(Singleton.class){id(singleton == null){singleton = new Singleton();}}}return singleton;}}3. 工厂设计模式工厂模式分为工厂方法模式和抽象工厂模式。
java最常用的六种设计模式及举例
1. 单例模式(Singleton Pattern):保证一个类只有一个实例,并提供一个全局访问点。
例如,数据库连接池的设计使用了单例模式。
2. 工厂模式(Factory Pattern):通过使用工厂方法来创建对象,而不是直接调用构造函数,从而实现封装和解耦的目的。
例如,Java中的Calendar类的getInstance()方法返回一个Calendar对象。
3. 观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会自动接收到通知并更新。
例如,Java中的事件处理机制,使用了观察者模式。
4. 装饰者模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,同时又不改变其结构。
例如,Java IO中的InputStream类是一个抽象类,而以其为基础的FileInputStream 类和BufferedInputStream类则是具体的装饰者。
5. 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另外一个接口。
例如,Java中的Collections类中的方法Arrays.asList()可以将数组转换为List类型。
6. 策略模式(Strategy Pattern):封装一系列的算法,使得它们可以互相替换,而不影响使用它们的客户端。
例如,Java中
的Comparator接口和Comparable接口,用于定义排序算法的策略。
java 常用设计模式理解Java中常用的设计模式是解决常见软件设计问题的经验总结和模板。
以下是对一些常用设计模式的理解:1.单例设计模式:o定义:保证一个类仅有一个实例,并提供一个全局访问点。
o用途:当需要控制资源的使用,或者希望某个对象在系统中只有一个实例时,如数据库连接池、线程池等。
2.工厂设计模式:o包括简单工厂模式、工厂方法模式和抽象工厂模式。
o简单工厂模式:定义一个工厂类,负责创建一系列相关或依赖的对象,客户端通过调用工厂方法来获取所需的产品对象,无需关心具体的创建过程。
o工厂方法模式:定义一个创建对象的接口,但让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
o抽象工厂模式:提供一个接口,用于创建相关或依赖对象家族的一系列对象,而不需要指定具体的产品类。
3.建造者(Builder)模式:o定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
o用途:当构造函数参数过多,或者需要分步骤创建对象,以及需要灵活地创建不同类型的对象时。
4.观察者(Observer)模式:o定义:定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
o用途:在事件驱动的系统中,当一个对象的状态改变时,需要自动通知其他对象。
5.适配器(Adapter)模式:o定义:将一个类的接口转换成客户期望的另一个接口,使原本不兼容的类可以一起工作。
o用途:当需要使用现有类,但其接口不符合需求时,或者需要将一组接口统一到一个接口时。
6.代理(Proxy)模式:o定义:为其他对象提供一种代理以控制对这个对象的访问。
o用途:远程代理(网络通信)、虚拟代理(内存优化)、保护代理(权限控制)和智能引用(额外操作)等场景。
7.装饰(Decorator)模式:o定义:动态地给一个对象添加一些额外的职责,装饰器提供了比继承更灵活的扩展对象功能的方式。
JAVA设计模式之工厂模式一、工厂模式的介绍工厂模式专门负责将大量有共同接口的类实例化。
工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。
工厂模式的几种形态:(1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method Pattern)。
(2)工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模式或虚拟构造子(Virtual Constructor)模式;(3)抽象工厂(Abstract Factory)模式,又称工具箱(Kit 或Toolkit)模式。
二、简单工厂模式2.1简单工厂模式介绍简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。
在简单工厂模式中,可以根据自变量的不同返回不同类的实例。
简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
2.2简单工厂模式角色(1)工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。
工厂类在客户端的直接调用下创建产品对象,它往往由一个具体Java 类实现。
(2)抽象产品(Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
抽象产品角色可以用一个Java 接口或者Java 抽象类实现。
(3)具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体Java 类实现。
2.3简单工厂模式的优缺点简单工厂模式的优点如下:(1)工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。
Java设计模式-⼯⼚⽅法模式⼯⼚⽅法模式(Factory Method Pattern),是简单⼯⼚模式的扩展,定义⼀个创建对象的接⼝,但是让⼦类来觉得该实例化那个类。
⼯⼚⽅法让⼀个类推迟实例化⾄它的⼦类中。
⼯⼚⽅法模式有四个⾓⾊:抽象⼯⼚(Creator)⾓⾊:这是⼯⼚⽅法模式的核⼼,具体⼯⼚⾓⾊必须实现这个接⼝才能创建对象。
具体⼯⼚(Concrete Creator)⾓⾊:实现了抽象⼯⼚⾓⾊的接⼝,实现了抽象⼯⼚,⽤具具体产品的创建。
抽象产品(Product)⾓⾊:定义了产品的共性,实现对产品最抽象的定义。
具体产品(Concrete Product)⾓⾊:实现抽象产品⾓⾊的接⼝。
⼯⼚⽅法所创建的对象就是该⾓⾊的实例。
⼯⼚⽅法模其类图如下:抽象⼯⼚的代码模式:public abstract class AbstractComputerFactory {/*** 创建计算机抽象⽅法** @param tClass* @param <T> 泛型类* @return*/public abstract <T extends AbstractComputer> T createComputer(Class<T> tClass);}抽象产品的代码模式:/*** 抽象计算机类*/public abstract class AbstractComputer {/*** 抽象⽅法** @param info*/public abstract void printInfo(String info);}具体⼯⼚的代码模式:@Componentpublic class ComputerFactory extends AbstractComputerFactory {/*** 创建计算机抽象⽅法** @param tClass* @param <T> 泛型类* @return*/public <T extends AbstractComputer> T createComputer(Class<T> tClass) {AbstractComputer computer = null;try {computer = (AbstractComputer) tClass.getDeclaredConstructor().newInstance();} catch (Exception e) {e.printStackTrace();}return (T) computer;}}具体产品的代码模式:此处⽣产两种不同的产品,Apple和ThinkPad/*** 苹果笔记本*/@Componentpublic class AppleComputer extends AbstractComputer {/*** 输出** @param info*/public void printInfo(String info) {System.out.println(info);}}/*** ThinkPad 笔记本*/@Componentpublic class ThinkPadComputer extends AbstractComputer {/*** 输出** @param info*/public void printInfo(String info) {System.out.println(info);}}测试:@SpringBootTestclass AbstractComputerFactoryTest {@Autowiredprivate AbstractComputerFactory computerFactory;@Testvoid showComputerInfo() {AbstractComputer thinkPadComputer = computerFactory.createComputer(ThinkPadComputer.class);AbstractComputer appleComputer = computerFactory.createComputer(AppleComputer.class);thinkPadComputer.printInfo("这是 ThinkPad 笔记本。
java常用的设计模式及应用场景一、单例模式(Singleton)单例模式是一种对象创建型模式,它指的是设计一个类,使其只能生成一个实例。
它只提供一个类实例,保证只有一个实例存在。
有时候,只需要一个类的实例来控制整个系统,例如实现一个全局的缓存,或是建立一个共享的日志记录器,单例模式可以很好的实现这个目的。
应用场景:1、对于需要频繁创建和销毁的对象,可以考虑使用单例模式,以避免过多地重复创建和销毁造成系统开销。
2、对于某些资源比较宝贵的对象,例如数据库连接,则可以用单例模式进行封装,保证全局应用程序只有一个,从而避免重复创建,浪费资源。
二、工厂模式(Factory)工厂模式是一种类创建型模式,它把类的实例化推迟到子类来完成。
它用于隔离客户类和实例化对象,通过声明抽象类类来定义构造过程,将不同的定义转移到不同的子类中去,从而使用户不需要关心实例化过程。
1、在有大量不同对象需要创建和管理的情况下,可以利用工厂模式封装类的实例化和存储,将池中不同对象来进行统一管理。
2、在使用设计模式的情况下,复杂的类结构已经不适合用一个实例来创建,可以采用工厂模式实现多个类的实例化,让用户不用关心对象实例的创建过程。
抽象工厂模式是一种工厂模式的拓展,它把简单工厂模式的单一职责拆分为多个类,从而实现一个系列相关的或相互依赖的工厂,以满足比较复杂的对象创建需求。
1、在需要创建复杂对象,而复杂对象又由多个部件组成的情况下,例如计算机,单一工厂模式已经不能满足需求,那么可以通过抽象工厂模式来实现。
2、在需要产生大量不同类型的对象,或者存在一系列相互依赖的产品族,这种情况下可以使用抽象工厂模式,将工厂定义为不同维度组成的一个系列。
四、建造者模式(Builder)建造者模式是一种设计模式,它也叫构造子模式,通过使用建造者模式,客户端可以不必担心具体的生产过程,只需要给出具体的请求,由建造者来负责构造出请求的产品对象。
1、在有复杂的产品对象的时候,例如需要对多个部件进行拼装,以构造出复杂的对象,可以采用建造者模式将复杂的拼装过程进行封装,避免复杂的拼装过程变得混乱。
1.关于工厂模式
工厂模式是根据不同的参数创建对象。
例如用工厂创建人。
如果我们想要一个男孩,工厂就会为我们生产一个男孩;如果我们需要一个女孩,工厂则会为我们生产一个女孩。
工厂会根据不同的参数,为我们提供不同的物品。
2.工厂模式类图
3.工厂模式Java代码
123456789101112131415161718192021222324252627282930313233343536373839404142interface Human { public void Talk(); public void Walk();} class Boy implements Human{ @Override public void Talk() { System.out.println( } @Override public void Walk() { System.out.println( }} class Girl implements Human{ @Override public void Talk() { System.out.println( } @Override
public void Walk() {
System.out.println(
4.工厂模式在Java标准库中的应用
根据不同的参数,getInstance()方法会返回不同的Calendar(日历)对象。
}
}
public class HumanFactory {
public static Human createHuman(String m){
Human p = null ;
if (m == "boy"){
p = new Boy();
}else if (m == "girl"
p = new Girl();
}
return p;
}
}
1234567java.util.Calendar – getInstance()java.util.Calendar – getInstance(TimeZone zone)java.util.Calendar – getInstance(Locale aLocale)java.util.Calendar – getInstance(TimeZone zone, Locale aLocale)
java.text.NumberFormat – getInstance()
java.text.NumberFormat – getInstance(Locale inLocale)。