JAVA设计模式——(十)抽象工厂模式(Abstract Factory Pattern)
JAVA设计模式——(十)抽象工厂模式(Abstract Factory Pattern)
- 介绍
- 理解
- 实现
- 工厂接口
- 工厂实现类
- 应用类
- 应用类实现
- 测试
- 改造工厂类
- 应用
介绍
抽象工厂模式在工厂模式的基础上,适配的对象变为一组相关的对象,为这一组对象提供一个接口。
理解
好比一个手机,提供了很多个app的入口,想使用哪个,就点开哪个,那工厂类也替我们完成这样的工作,而不必过多关心找不到使用应用的入口。
实现
工厂接口
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/4 17:06* @Contact 643947568@qq.com*/
public interface ApplicationFactory {public Application1 createApplication1();public Application2 createApplication2();
}
工厂实现类
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/4 17:06* @Contact 643947568@qq.com*/
public class ActualApplicationFactory implements ApplicationFactory {@Overridepublic Application1 createApplication1() {return new Application1();}@Overridepublic Application2 createApplication2() {return new Application2();}
}
应用类
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/4 17:03* @Contact 643947568@qq.com*/
public interface Application {public void enterApplication();public void executeApplication();public void exitApplication();
}
应用类实现
两个子类
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/4 17:04* @Contact 643947568@qq.com*/
public class Application1 implements Application {@Overridepublic void enterApplication() {System.out.println("进入应用1");}@Overridepublic void executeApplication() {System.out.println("执行应用1");}@Overridepublic void exitApplication() {System.out.println("退出应用1");}
}
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/5/4 17:04* @Contact 643947568@qq.com*/
public class Application2 implements Application {@Overridepublic void enterApplication() {System.out.println("进入应用1");}@Overridepublic void executeApplication() {System.out.println("执行应用1");}@Overridepublic void exitApplication() {System.out.println("退出应用1");}
}
测试
如下代码,创建工厂类。然后从工厂类决定创建哪个Application
子类的实例。
package cn.sh.designepattern.example01;/*** @Author song* @Version 0.0.1* @Date 2025/4/29 11:45* @Contact 643947568@qq.com*/
public class Main {public static void main(String[] args) {ApplicationFactory actualApplicationFactory = new ActualApplicationFactory();Application1 application1 = actualApplicationFactory.createApplication1();Application2 application2 = actualApplicationFactory.createApplication2();application1.enterApplication();application1.executeApplication();application1.exitApplication();application2.enterApplication();application2.executeApplication();application2.exitApplication();}
}
改造工厂类
可以采用泛型改造工厂类,使用反射创建,减少代码的冗余,具体可见工厂模式
中的实现。
应用
对于多个对象,他们之间的存在着共通的实现逻辑,就好比手机的app,都需要我们在手机打开一样,而不用关心底层的实现逻辑,即使换了一个操作系统,苹果手机上也只需要更换一套工厂类,处理不同的系统信息。