工厂方法模式

编程

我们来举个例子看一下,UML图如下所示:

Phone是抽象的手机类,MiHuaweiOppo是具体的手机。

有一个生产手机的工厂接口PhoneFactory,然后有三个实现了这个借口的具体工厂类:

  • MiPhoneFactory

  • HuaweiPhoneFactory

  • OppoPhoneFactory

下面看具体的代码:

抽象Phone

publicabstractclassPhone {

   protectedStringname;

   publicPhone(Stringname) {

       this.name=name;

  }

   publicStringgetName() {

       returnthis.name;

  }

}

小米手机类:Mi

publicclassMiextendsPhone {

   publicMi(Stringname) {

       super(name);

  }

}

华为手机类:Huawei

publicclassHuaWeiextendsPhone {

   publicHuaWei(Stringname) {

       super(name);

  }

}

Oppo手机类:Oppo

publicclassOppoextendsPhone {

   publicOppo(Stringname) {

       super(name);

  }

}

 

然后是工厂,抽象工厂接口:

/**

* 抽象的工厂接口

*/

publicinterfacePhoneFactory {

   /**

    * 创建手机的method

    * @param name

    * @return

    */

   PhonecreatePhone(Stringname);

}

小米手机工厂

/**

* 小米手机工厂

*/

publicclassMiPhoneFactoryimplementsPhoneFactory {

   @Override

   publicPhonecreatePhone(Stringname) {

       returnnewMi(name);

  }

}

华为手机工厂

/**

* 华为手机工厂

*/

publicclassHuaWeiPhoneFactoryimplementsPhoneFactory {

   @Override

   publicPhonecreatePhone(Stringname) {

       returnnewHuaWei(name);

  }

}

Oppo手机工厂

/**

* Oppo手机工厂

*/

publicclassOppoPhoneFactoryimplementsPhoneFactory {

   @Override

   publicPhonecreatePhone(Stringname) {

       returnnewOppo(name);

  }

}

 

Client端:

publicclassConsumerDemo {

   publicstaticvoidmain(String[] args) throwsIOException {

       // 生产华为手机

       PhoneFactoryhuaWeiPhoneFactory=newHuaWeiPhoneFactory();

       Phonephone=huaWeiPhoneFactory.createPhone("华为");

       System.out.println(phone.getName());

       // 生产Oppo手机

       PhoneFactoryoppoPhoneFactory=newOppoPhoneFactory();

       Phoneoppo=oppoPhoneFactory.createPhone("Oppo");

       System.out.println(oppo.getName());

       // 生产小米手机

       PhoneFactorymiPhoneFactory=newMiPhoneFactory();

       Phonemi=oppoPhoneFactory.createPhone("Mi");

       System.out.println(mi.getName());

  }

}

运行输出结果如下:

华为

Oppo

Mi

 

最后我们可以根据以上代码思考一下工厂方法模式的优缺点。

优点:符合开闭原则,比简单工厂更容易扩展,新增一个产品的时候,只需要新增一个Factory接口的实现类即可,不用修改原有代码。

缺点:新增加产品的时候要创建一个新的具体产品生产类,这样随着产品的增加,会增加很多类。

以上是 工厂方法模式 的全部内容, 来源链接: utcz.com/z/514113.html

回到顶部