JAVA 工厂模式-简单工厂模式

需要掌握:工厂模式

概述

简单工厂模式是属于创建型模式,是用 工厂方法 代替 new 操作的一种模式

简单工厂一般分为:

  • 简单工厂-普通方式
  • 简单工厂-静态方法

步骤

  1. 定义“产品”接口
  2. 定义若干 “产品”接口实现类
  3. 定义工厂类,该类的方法返回“产品”对象

案例

简单工厂-普通方式

定义“产品”接口:

public interface InterPhone {

    public void call(String num);
    public void about();
}

定义若干 “产品”接口实现类

class IPhone implements InterPhone{
    String name;
    String cpu;
    int rom;
    int ram;
    int battery;

    @Override
    public void call(String num) {
        System.out.println("用iphone打电话给 "+num);
    }

    @Override
    public void about() {
        System.out.println("配置是:");
        System.out.println("name:"+name);
        System.out.println("cpu:"+cpu);
        System.out.println("rom:"+rom);
        System.out.println("ram:"+ram);
        System.out.println("battery:"+battery);
    }
}
class MiPhone implements InterPhone{
    String name;
    String cpu;
    int rom;
    int ram;
    int battery;

    @Override
    public void call(String num) {
        System.out.println("用小米打电话给 "+num);
    }
    @Override
    public void about() {
        System.out.println("配置是:");
        System.out.println("name:"+name);
        System.out.println("cpu:"+cpu);
        System.out.println("rom:"+rom);
        System.out.println("ram:"+ram);
        System.out.println("battery:"+battery);
    }
}

定义工厂类

public class PhoneFactory {
    public static InterPhone getPhone(String name){
        InterPhone ret=null;
        if("iphone11".equals(name)){
            IPhone phone = new IPhone();
            phone.name="iphone11";
            phone.cpu="A13";
            phone.rom=64;
            phone.ram=2;
            phone.battery=3000;
            ret=phone;
        }else if("xiaomi9".equals(name)){
            MiPhone phone = new MiPhone();
            phone.name="小米9";
            phone.cpu="骁龙855";
            phone.rom=256;
            phone.ram=16;
            phone.battery=5000;
            ret=phone;
        }
        return ret;
    }
}

测试

public class Test {
    public static void main(String[] args) {
        InterPhone ip=PhoneFactory.getPhone("iphone11");
        ip.about();
        ip.call("110");
    }
}

缺点

如果传递的字符串出错,则不能正确创建对象

简单工厂-多个静态方法

工厂类 提供多个静态方法,不需要创建工厂对象,通过工厂的静态方法,分别创建对象

改造工厂类

public class PhoneFactory3 {
    public static InterPhone getIPhone11(){
        IPhone phone = new IPhone();
        phone.name="iphone11";
        phone.cpu="A13";
        phone.rom=64;
        phone.ram=2;
        phone.battery=3000;
        return phone;
    }

    public static InterPhone getXiaomi9(){
        MiPhone phone = new MiPhone();
        phone.name="小米9";
        phone.cpu="骁龙855";
        phone.rom=256;
        phone.ram=16;
        phone.battery=5000;
        return phone;
    }

}

测试类

public class Test {
    public static void main(String[] args) {
        InterPhone ip=PhoneFactory3.getXiaomi9();
        ip.about();
        ip.call("110");
    }
}

优点

简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。明确区分了各自的职责和权力,有利于整个软件体系结构的优化

缺点

  1. 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

  2. 扩展困难,添加新产品,就需要增加方法,违背 “开闭原则”;在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

简单工程模式在JDK中的使用

参考:
https://www.cnblogs.com/geek6/p/3951677.html
https://blog.csdn.net/weixin_44774355/article/details/104858407


原文出处:/show_1EF4tOEIlxVH.html