工厂模式

依然范特西╮ 提交于 2019-12-12 08:29:35

工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
介绍

  • 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
  • 主要解决接口选择的问题

实现

  • 1.创建一个接口
public interface FactoryTest {

    void test();

}
  • 2.创建实现接口的实体类。
public class ATest implements FactoryTest {
    @Override
    public void test() {
        System.out.println("ATest");
    }
}
public class BTest implements FactoryTest {
    @Override
    public void test() {
        System.out.println("BTest");
    }
}

public class CTest implements FactoryTest {
    @Override
    public void test() {
        System.out.println("CTest");
    }
}

  • 3.创建一个工厂,生成基于给定信息的实体类的对象。
public class ChooseFactory {

    //使用 getTest 方法获取形状类型的对象
    public FactoryTest getTest(String test){
        if(test == null){
            return null;
        }
        if(test.equals("ATest")){
            return new ATest();
        } else if(test.equals("BTest")){
            return new BTest();
        } else if(test.equals("CTest")){
            return new CTest();
        }
        return null;
    }
}
  • 4.使用该工厂,通过传递类型信息来获取实体类的对象。
public class FactoryDemo {
    public static void main(String[] args) {
        ChooseFactory chooseFactory = new ChooseFactory();

        //获取 Factory 的对象,并调用它的 getTest 方法
        FactoryTest testA = chooseFactory.getTest("ATest");

        //调用 FactoryTest 的 test方法
        testA.test();

        //获取 Factory 的对象,并调用它的 getTest 方法
        FactoryTest testB = chooseFactory.getTest("BTest");

        //调用 FactoryTest 的 test方法
        testB.test();

        //获取 Factory 的对象,并调用它的 getTest 方法
        FactoryTest testC = chooseFactory.getTest("CTest");

        //调用 FactoryTest 的 test方法
        testC.test();
    }
}

  • 5.打印结果
Connected to the target VM, address: '127.0.0.1:0', transport: 'socket'
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
ATest
BTest
CTest
Disconnected from the target VM, address: '127.0.0.1:0', transport: 'socket'
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!