Java设计模式之工厂模式

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_33829547/article/details/81051616

前言

上篇介绍了简单工厂,然而简单工厂并没有很好的遵守开闭原则工厂模式是针对简单工厂不易扩展、对修改开放等缺点作出的改进。本文的依然选用上篇简单工厂中的手机品牌与厂家的例子

工厂模式

工厂模式中,工厂类消除了if-else结构语句,转而使用定义工厂接口,实现不同工厂子类的形式创建不同产品。

产品接口和具体产品实现类的代码没有变化:

Phone.java

public interface Phone {
    void show();
}

iPhone.java

public class iPhone implements Phone {

    String brand; // 品牌
    int storage; // 容量
    String os;  // 操作系统

    public iPhone() {
        this.brand = "Apple";
        this.storage = 64;
        this.os = "iOS";
    }

    @Override
    public void show() {
        System.out.println("品牌为:" + brand + ",操作系统为:" + os + ",容量为:" + storage + "GB");
    }
}

WindowsPhone.java

public class WindowsPhone implements Phone {

    String brand; // 品牌
    int storage; // 容量
    String os;  // 操作系统

    public WindowsPhone() {
        this.brand = "WindowsPhone";
        this.storage = 32;
        this.os = "windows";
    }

    @Override
    public void show() {
        System.out.println("品牌为:" + brand + ",操作系统为:" + os + ",容量为:" + storage + "GB");
    }
}

好,到此为止的代码都和简单工厂中一模一样,接下来从定义工厂接口开始代码发生了变化:

Factory.java

// 工厂接口
public interface Factory {
    Phone produce();// 生产手机
}

简单工厂中只有一个具体的工厂类,负责生产所有种类的产品,造成扩展不易的缺陷,这里使用定义接口的方式规避这个缺点。

接下来分别定义具体产品的工厂实现类:

iPhoneFactory.java

// iPhone手机工厂类
public class iPhoneFactory implements Factory {
    @Override
    public Phone produce() {
        return new iPhone();// 生产iPhone手机
    }
}

WPFactory.java

// WindowsPhone手机工厂类
public class WPFactory implements Factory {
    @Override
    public Phone produce() {
        return new WindowsPhone();// 生产WindowsPhone手机
    }
}

最后是客户端调用过程示例:

Main.java

public class Main {
    public static void main(String[] args) {
        Factory factory = new iPhoneFactory(); // 创建iPhone工厂
        Phone phone = factory.produce();// 生产iPhone手机
        phone.show(); // 打印信息
        factory = new WPFactory();// 切换到WindowsPhone工厂
        phone = factory.produce();// 生产WindowsPhone手机
        phone.show();// 打印信息
    }
}

这就是工厂模式的写法,满足了开闭原则,如果需要增加新的产品,不需要修改原有的代码,只需实现新的产品类和对应的工厂类即可。

阅读更多

没有更多推荐了,返回首页