简单工厂模式

1 什么是简单工厂模式


简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。通常是专门定义一个类来创建其它类的实例,被创建的实例通常都具有相同的父类。

2 模式中的角色


  • 工厂角色

简单工厂模式的核心,主要负责创建实体类的内部逻辑。工厂类可以直接被外界调用,创建所需要的实例。

  • 抽象角色

简单工厂模式所实例化的对象的公共父类。

  • 具体产品角色

简单工厂模式所创建的实例对象。

3 几种实现方法


3.1 原始方法
  • 先创建接口和其实现类

接口:Fruit.class

public interface Fruit {
    void eat();
}

实现类:Apple.class /Banna.class

public class Apple implements Fruit{

    @Override
    public void eat() {
        System.out.println("吃苹果");
    }
    
}
public class Banana implements Fruit{

    @Override
    public void eat() {
        System.out.println("吃香蕉");
    }

}

工厂类:SimpleFactory.class

public class SimpleFactory {
    public static Fruit getApple(){
        return new Apple();
    }
    public static Fruit getBanana(){
        return new Banana();
    }
}

测试类:SimpleFactoryTest.class

public class SImpleFactoryTest {
    public static void main(String[] args) {
        Fruit apple = SimpleFactory.getApple();
        Fruit banana = SimpleFactory.getBanana();
        apple.eat();
        banana.eat();
    }
}

缺陷:当有新的实现类时都需要在工厂类添加添加一个方法。

3.2 改进

将工厂类进行改进.

工厂类:SimpleFactory.class

public class SimpleFactory {
        public static Fruit getFruit(String className){
        if("apple".equalsIgnoreCase(className)){
            return new Apple();
        }else if("banana".equalsIgnoreCase(className)){
            return new Banana();
        }else{
            return null;
        }
    }
}

测试类:SimpleFactoryTest.class

public class SImpleFactoryTest {
    public static void main(String[] args) {
        Fruit apple = SimpleFactory.getApple("apple");
        Fruit banana = SimpleFactory.getBanana("banana");
        apple.eat();
        banana.eat();
    }
}

改进模式依然存在缺陷,在有新的实现类时,虽然不需要重新添加方法,但还是要在方法中添加代码。我们想要的是编写一次工厂类后就不再改动。

3.3 使用反射机制再次改进

工厂类:SimpleFactory.class

public class SimpleFactory {
    public static Fruit getFruit(Class<?> className){
         try {
             return (Fruit) className.newInstance();
        }  catch (Exception e) {
            e.printStackTrace();
        }
         return null;
    }
}

测试类:SimpleFactoryTest.class

public class SImpleFactoryTest {
    public static void main(String[] args) {
        Fruit apple = SimpleFactory.getApple(Apple.class);
        Fruit banana = SimpleFactory.getBanana(Banana.class);
        apple.eat();
        banana.eat();
    }
}

下一篇:工厂方法模式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容