Java设计模式从精通到入门五 抽象工厂方法模式

​ 这里我得把工厂方法模式得定义拿出来做一下比较:定义一个创建对象的接口,由子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。这里强调一下,工厂方法包括:简单工厂模式,和工厂方法模式等一些系列的工厂方法模式的变形。

案例

​ 现在有两个产品,一个是手机,一个是电脑。手机和电脑都是不同的生产商生产的。我们要实现一个工厂管理系统,记录华为和苹果着两家工厂生产的手机和电脑信息。

​ 已知,华为和苹果都有自己的工厂,华为的叫做华为工厂,苹果的叫做苹果工厂。华为工厂生产华为手机和华为电脑。苹果工厂生产苹果手机和苹果电脑。用抽象工厂模式实现改系统,他的设计图如 图一:

图1

图一 代码如下

Factory类:

/** * @InterfaceName Factory * @Description 抽象工厂 * @Author ouyangkang * @Date 2019-01-19 11:25 **/ public interface Factory { /** * @Author ouyangkang * @Description 生产手机 * @Date 11:25 2019/1/19 * @param * @return com.设计模式.factory.abstractfactory.Phone **/ Phone createPhone(); /** * @Author ouyangkang * @Description 生产电脑 * @Date 11:26 2019/1/19 * @param * @return com.设计模式.factory.abstractfactory.Computer **/ Computer createComputer(); }

IphoneFactory类

/** * @ClassName IphoneFactory * @Description 苹果厂商之生产苹果的产品 * @Author ouyangkang * @Date 2019-01-19 11:36 **/ public class IphoneFactory implements Factory{ @Override public Phone createPhone() { return new Iphone(); } @Override public Computer createComputer() { return new IphoneComputer(); } }

HuaWeiFactory类

/** * @ClassName HuaWeiFactory * @Description TODO * @Author ouyangkang * @Date 2019-01-19 11:37 **/ public class HuaWeiFactory implements Factory { @Override public Phone createPhone() { return new HuaWeiIphone(); } @Override public Computer createComputer() { return new HuaWeiComputer(); } }

Phone类

/** * @InterfaceName Phone * @Description 手机接口 * @Author ouyangkang * @Date 2019-01-19 11:21 **/ public interface Phone { /** * @Author ouyangkang * @Description 手机生产商 * @Date 11:23 2019/1/19 * @param * @return void **/ void name(); /** * @Author ouyangkang * @Description 通信功能 * @Date 11:22 2019/1/19 * @param * @return void **/ void communication(); }

Iphone类

/** * @ClassName Iphone * @Description TODO * @Author ouyangkang * @Date 2019-01-19 11:27 **/ public class Iphone implements Phone { @Override public void name() { System.out.println("苹果手机"); } @Override public void communication() { System.out.println("用苹果手机进行通信"); } }

HuaWeiPhone类

/** * @ClassName HuaWeiPhone * @Description TODO * @Author ouyangkang * @Date 2019-01-19 11:33 **/ public class HuaWeiPhone implements Phone { @Override public void name() { System.out.println("华为手机"); } @Override public void communication() { System.out.println("用华为手机进行通信"); } }

Computer类

/** * @InterfaceName Computer * @Description 电脑 * @Author ouyangkang * @Date 2019-01-19 11:23 **/ public interface Computer { /** * @Author ouyangkang * @Description 电脑生产商 * @Date 11:24 2019/1/19 * @param * @return void **/ void name(); /** * @Author ouyangkang * @Description 上网 * @Date 11:24 2019/1/19 * @param * @return void **/ void surf(); }

HuaWeiComputer类和IPhoneComputer类和上面HuaWeiIphone和Iphone类似代码就不重复了。
Client类

public class Client { public static void main(String[] args) { //苹果厂商 Factory iphoneFactory = new IphoneFactory(); Computer iphoneFactoryComputer = iphoneFactory.createComputer(); iphoneFactoryComputer.name(); iphoneFactoryComputer.surf(); System.out.println("--------------------------"); Phone phone = iphoneFactory.createPhone(); phone.name(); phone.communication(); System.out.println("--------------------------"); // 华为厂商 Factory huaWeiFactory = new HuaWeiFactory(); Computer huaWeiFactoryComputer = huaWeiFactory.createComputer(); huaWeiFactoryComputer.surf(); huaWeiFactoryComputer.name(); System.out.println("--------------------------"); Phone huaWeiPhone = huaWeiFactory.createPhone(); huaWeiPhone.communication(); huaWeiPhone.name(); } }

运行得到结果

苹果电脑 用苹果电脑上网 -------------------------- 苹果手机 用苹果手机进行通信 -------------------------- 用华为电脑上网 华为电脑 -------------------------- 用华为手机进行通信 华为手机 总结

​ 上面得简单UML类图我用Visual Paradigm 15.2划了好久,想起了学校外教教我们画这个得时候,后悔当初学得不好,现在只能自己慢慢摸索。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdfww.html