网站首页 > 精选教程 正文
1. 工厂模式(简单工厂模式)
概念
工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离。通过一个工厂类来负责创建对象,客户端只需要向工厂类请求对象,而不需要知道对象的具体创建过程。
使用场景
- 当创建对象的逻辑比较复杂,且创建过程可能会经常变化时。
- 当需要根据不同的条件创建不同类型的对象时。
使用方法
- 定义一个产品接口或抽象类。
- 实现具体的产品类,这些类都实现产品接口或继承抽象类。
- 创建一个工厂类,在工厂类中提供一个创建产品的方法,根据不同的条件返回不同的产品对象。
Java 实现
// 产品接口
interface Product {
void use();
}
// 具体产品类A
class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("使用产品A");
}
}
// 具体产品类B
class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("使用产品B");
}
}
// 工厂类
class SimpleFactory {
public static Product createProduct(String type) {
if ("A".equals(type)) {
return new ConcreteProductA();
} else if ("B".equals(type)) {
return new ConcreteProductB();
}
return null;
}
}
// 客户端代码
public class SimpleFactoryDemo {
public static void main(String[] args) {
Product productA = SimpleFactory.createProduct("A");
if (productA != null) {
productA.use();
}
Product productB = SimpleFactory.createProduct("B");
if (productB != null) {
productB.use();
}
}
}
2. 工厂方法模式
概念
工厂方法模式是在简单工厂模式的基础上进行了改进,它将对象的创建延迟到子类中实现。定义一个创建对象的抽象方法,由子类决定具体创建哪个对象。
使用场景
- 当一个类不知道它所需要的对象的类时。
- 当一个类希望由它的子类来指定它所创建的对象时。
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化时。
使用方法
- 定义一个抽象产品接口或抽象类。
- 实现具体的产品类,这些类都实现产品接口或继承抽象类。
- 定义一个抽象工厂类,其中包含一个抽象的创建产品的方法。
- 实现具体的工厂类,继承抽象工厂类,实现创建产品的方法。
Java 实现
// 产品接口
interface Product {
void use();
}
// 具体产品类A
class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("使用产品A");
}
}
// 具体产品类B
class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("使用产品B");
}
}
// 抽象工厂类
abstract class Factory {
public abstract Product createProduct();
}
// 具体工厂类A
class ConcreteFactoryA extends Factory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
// 具体工厂类B
class ConcreteFactoryB extends Factory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
// 客户端代码
public class FactoryMethodDemo {
public static void main(String[] args) {
Factory factoryA = new ConcreteFactoryA();
Product productA = factoryA.createProduct();
productA.use();
Factory factoryB = new ConcreteFactoryB();
Product productB = factoryB.createProduct();
productB.use();
}
}
3. 抽象工厂方法模式
概念
抽象工厂模式是工厂方法模式的进一步扩展,它提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。客户端通过抽象工厂来创建一组相关的产品,而不需要关心具体的产品类。
使用场景
- 当需要创建一组相关的产品对象,并且希望这些对象之间保持一定的一致性时。
- 当系统需要独立于它的产品的创建、组合和表示时。
使用方法
- 定义多个抽象产品接口或抽象类,每个接口或抽象类代表一个产品族。
- 实现具体的产品类,这些类分别实现不同的产品接口或继承不同的抽象类。
- 定义一个抽象工厂接口,其中包含多个创建不同产品的抽象方法。
- 实现具体的工厂类,实现抽象工厂接口,创建具体的产品对象。
Java 实现
// 抽象产品A
interface AbstractProductA {
void use();
}
// 具体产品A1
class ConcreteProductA1 implements AbstractProductA {
@Override
public void use() {
System.out.println("使用产品A1");
}
}
// 具体产品A2
class ConcreteProductA2 implements AbstractProductA {
@Override
public void use() {
System.out.println("使用产品A2");
}
}
// 抽象产品B
interface AbstractProductB {
void operate();
}
// 具体产品B1
class ConcreteProductB1 implements AbstractProductB {
@Override
public void operate() {
System.out.println("操作产品B1");
}
}
// 具体产品B2
class ConcreteProductB2 implements AbstractProductB {
@Override
public void operate() {
System.out.println("操作产品B2");
}
}
// 抽象工厂接口
interface AbstractFactory {
AbstractProductA createProductA();
AbstractProductB createProductB();
}
// 具体工厂1
class ConcreteFactory1 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB1();
}
}
// 具体工厂2
class ConcreteFactory2 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB2();
}
}
// 客户端代码
public class AbstractFactoryDemo {
public static void main(String[] args) {
AbstractFactory factory1 = new ConcreteFactory1();
AbstractProductA productA1 = factory1.createProductA();
AbstractProductB productB1 = factory1.createProductB();
productA1.use();
productB1.operate();
AbstractFactory factory2 = new ConcreteFactory2();
AbstractProductA productA2 = factory2.createProductA();
AbstractProductB productB2 = factory2.createProductB();
productA2.use();
productB2.operate();
}
}
总结
- 简单工厂模式:通过一个工厂类创建不同类型的对象,适用于创建对象逻辑简单且变化不大的场景。
- 工厂方法模式:将对象的创建延迟到子类中实现,增加了代码的可扩展性,适用于需要根据不同情况创建不同对象的场景。
- 抽象工厂模式:用于创建一组相关的产品对象,保证了产品之间的一致性,适用于创建多个相关产品族的场景。
- 上一篇: 【二】设计模式~创建型模式~工厂方法模式(Java)
- 下一篇: 深入解析Java工厂模式及其应用场景
猜你喜欢
- 2025-03-08 创建型设计模式——工厂模式和抽象工厂模式
- 2025-03-08 谈谈设计模式:建造者模式在jdk中的体现,它和工厂模式区别?
- 2025-03-08 Java开发篇——设计模式(3)面试被问工厂模式?不要怕看这里
- 2025-03-08 1. 工厂模式详解
- 2025-03-08 人人皆可创建“工厂”——工厂模式
- 2025-03-08 简单学设计模式——工厂模式
- 2025-03-08 Java设计模式之工厂模式
- 2025-03-08 Java 设计模式实战系列—工厂模式
- 2025-03-08 JAVA抽象工厂模式
- 2025-03-08 深入解析Java工厂模式及其应用场景
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)