JAVA设计模式------(十)抽象工厂模式(Abstract Factory Pattern)
介绍
抽象工厂模式在工厂模式的基础上,适配的对象变为一组相关的对象,为这一组对象提供一个接口。
理解
好比一个手机,提供了很多个app的入口,想使用哪个,就点开哪个,那工厂类也替我们完成这样的工作,而不必过多关心找不到使用应用的入口。
实现
工厂接口
java
package cn.sh.designepattern.example01;
/**
* @Author song
* @Version 0.0.1
* @Date 2025/5/4 17:06
* @Contact [email protected]
*/
public interface ApplicationFactory {
public Application1 createApplication1();
public Application2 createApplication2();
}
工厂实现类
java
package cn.sh.designepattern.example01;
/**
* @Author song
* @Version 0.0.1
* @Date 2025/5/4 17:06
* @Contact [email protected]
*/
public class ActualApplicationFactory implements ApplicationFactory {
@Override
public Application1 createApplication1() {
return new Application1();
}
@Override
public Application2 createApplication2() {
return new Application2();
}
}
应用类
java
package cn.sh.designepattern.example01;
/**
* @Author song
* @Version 0.0.1
* @Date 2025/5/4 17:03
* @Contact [email protected]
*/
public interface Application {
public void enterApplication();
public void executeApplication();
public void exitApplication();
}
应用类实现
两个子类
java
package cn.sh.designepattern.example01;
/**
* @Author song
* @Version 0.0.1
* @Date 2025/5/4 17:04
* @Contact [email protected]
*/
public class Application1 implements Application {
@Override
public void enterApplication() {
System.out.println("进入应用1");
}
@Override
public void executeApplication() {
System.out.println("执行应用1");
}
@Override
public void exitApplication() {
System.out.println("退出应用1");
}
}
java
package cn.sh.designepattern.example01;
/**
* @Author song
* @Version 0.0.1
* @Date 2025/5/4 17:04
* @Contact [email protected]
*/
public class Application2 implements Application {
@Override
public void enterApplication() {
System.out.println("进入应用1");
}
@Override
public void executeApplication() {
System.out.println("执行应用1");
}
@Override
public void exitApplication() {
System.out.println("退出应用1");
}
}
测试
如下代码,创建工厂类。然后从工厂类决定创建哪个Application
子类的实例。
java
package cn.sh.designepattern.example01;
/**
* @Author song
* @Version 0.0.1
* @Date 2025/4/29 11:45
* @Contact [email protected]
*/
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,都需要我们在手机打开一样,而不用关心底层的实现逻辑,即使换了一个操作系统,苹果手机上也只需要更换一套工厂类,处理不同的系统信息。