Java 工厂模式

作者: Yohann丶blog | 来源:发表于2020-09-04 10:19 被阅读0次
WechatIMG136.jpeg

介绍

定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。

角色

角色 说明
Factory 抽象工厂类,负责创建具体产品的实例
Product 抽象产品类,定义产品子类的公共接口
ConcreteProduct 具体产品类,实现 Product 父类的接口功能,也可添加自定义的功能

角色示例

类名 担任角色 说明
Phone Product 手机类,定义手机子类的公共接口
IPhoneX ConcreteProduct IPhoneX 手机类,实现 IPhoneX 类的接口功能,也可添加自定义的功能
HUAWEIP40 ConcreteProduct HUAWEIP40 手机类,实现 HUAWEIP40 类的接口功能,也可添加自定义的功能
PhoneFactory Factory 手机工厂类,负责生产手机的实例
FactoryTest Factory 工厂测试类,负责调用生产什么型号手机

UML 类图

工厂模式.jpg

普通工厂模式

  • 创建 Phone.java,代码如下:
interface Phone{
    public void call();
    public void photograph();
}
  • 创建 HUAWEIP40.java,代码如下:
class HUAWEIP40 implements Phone{
    public void call(){
        System.out.println("HUAWEIP40 can call.");
    }
    public void photograph(){
        System.out.println("HUAWEIP40 can photograph.");
    }
}
  • 创建 IPhoneX.java,代码如下:
class IPhoneX implements Phone{
    public void call(){
        System.out.println("IPhoneX can call.");
    }
    public void photograph(){
        System.out.println("IPhoneX can photograph.");
    }
}
  • 创建 PhoneFactory.java,代码如下:
class PhoneFactory{
    public Phone createPhone(String model){
        if( model.equals("IPhoneX") ){
           return new IPhoneX();
        }else if( model.equals("HUAWEIP40")){
           return new HUAWEIP40();
        }else {
            System.out.println("Please enter the correct model!");
            return null;
        }
    }
}
  • 创建 FactoryTest.java,代码如下:
class FactoryTest {
    public static void main(String[] args){
        PhoneFactory factory = new PhoneFactory();
        Phone phone = factory.createPhone("IPhoneXS");
        phone.call();
        phone.photograph();
    }
}
  • 执行
$ javac FactoryTest.java
$ java FactoryTest
Please enter the correct model!

普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象。

多个工厂方法模式

  • 修改 PhoneFactory.java,代码如下:
class PhoneFactory{
    public IPhoneX createIPhoneX() {
        return new IPhoneX();
    }
    public HUAWEIP40 createHUAWEIP40() {
        return new HUAWEIP40();
    }
}
  • 修改 FactoryTest.java,代码如下:
class FactoryTest {
    public static void main(String[] args){
        PhoneFactory factory = new PhoneFactory();
        Phone phone = factory.createIPhoneX();
        phone.call();
        phone.photograph();
    }
}
  • 执行
$ javac FactoryTest.java
$ java FactoryTest
IPhoneX can call.
IPhoneX can photograph.

多个工厂方法模式是提供多个工厂方法,分别创建对象。

静态工厂方法模式

  • 修改 PhoneFactory.java,代码如下:
class PhoneFactory{
    public static IPhoneX createIPhoneX() {
        return new IPhoneX();
    }
    public static HUAWEIP40 createHUAWEIP40() {
        return new HUAWEIP40();
    }
}
  • 修改 FactoryTest.java,代码如下:
class FactoryTest {
    public static void main(String[] args){
        Phone phone = PhoneFactory.createHUAWEIP40();
        phone.call();
        phone.photograph();
    }
}
  • 执行
$ javac FactoryTest.java
$ java FactoryTest
HUAWEIP40 can call.
HUAWEIP40 can photograph.

静态工厂方法模式里的方法是静态,可以直接调用。

相关文章

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • java设计模式

    一、《JAVA与模式》之工厂方法模式 二、《JAVA与模式》之抽象工厂模式 三、《JAVA与模式》之单例模式 四、...

  • Java设计模式之01_Factory(工厂模式)

    更多Java设计模式:Java设计模式-目录 一、工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化。工厂模...

  • 工厂模式(Factory Pattern)

    概述 工厂模式(Factory Pattern)包括简单工厂模式、工厂方法模式和抽象工厂模式,是 Java 中最常...

  • 《JAVA与模式》之简单工厂模式

    《JAVA与模式》之简单工厂模式 在阎宏博士的《JAVA与模式》一书中开头是这样描述简单工厂模式的:简单工厂模式是...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 设计模式-工厂模式

    工厂模式(Factory Pattern): 1.简介 工厂模式(Factory Pattern)是 Java 中...

  • 设计模式系列-简单工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 定义 简单工厂模式又叫做静态工厂方法模式...

网友评论

    本文标题:Java 工厂模式

    本文链接:https://www.haomeiwen.com/subject/peqzsktx.html