标签:前言 url creat span rri 静态方法 oid huawei 缺点
在介绍工厂方法模式之前,我们需要知道这个设计模式是什么,解决了什么样的问题?在上一篇博客 设计模式(Java语言)- 简单工厂模式 介绍了简单工厂模式,然后总结了简单工厂模式的缺点:
1、当新增类型时,我们不得不修改原来的工厂,这样就违背了设计模式6大原则中的 开闭原则。
2、简单工厂模式使用了静态方法来创建对象,因此无法被实现或继承,从而导致改工厂类缺少灵活性,不易拓展。
3、所有的类的创建都需要这个工厂类,因此系统已工厂类是强依赖的关系,一旦工厂类出现错误,将对整个系统产生比较大的影响。
工厂方法模式就是解决上简单工厂模式的缺点。工厂方法模式UML类图:
1、创建抽象产品类,定义接口。
2、创建抽象工厂,定义具体工厂的接口。
3、创建具体的产品类
4、创建具体的工厂类
5、客户端调用工厂类创建对象
本模式我们加ing继续使用创建手机作为例子来讲解。我们根据上面的步骤来完成创建手机的流程:
/** * @className: IphoneFactory * @description: iphone手机工厂类 * @author: rainple * @create: 2020-01-21 20:52 **/ public class IphoneFactory implements PhoneFactory{ @Override public Phone createPhone() { Iphone iphone = new Iphone(); iphone.setName("iphone手机"); return iphone; } }
/** * @InterfaceName: Phone * @description: 抽象手机 * @author: rainple * @create: 2020-01-21 20:48 **/ public abstract class Phone { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
/** * @className: Iphone * @description: * @author: rainple * @create: 2020-01-21 20:51 **/ public class Iphone extends Phone { } /** * @className: HuaWeiPhone * @description: 华为手机 * @author: rainple * @create: 2020-01-21 20:52 **/ public class HuaWeiPhone extends Phone { }
/** * @className: HuaWeiFactory * @description: 华为手机工厂 * @author: rainple * @create: 2020-01-21 21:04 **/ public class HuaWeiFactory implements PhoneFactory { @Override public Phone createPhone() { HuaWeiPhone huaWeiPhone = new HuaWeiPhone(); huaWeiPhone.setName("华为手机"); return huaWeiPhone; } } /** * @className: IphoneFactory * @description: iphone手机工厂类 * @author: rainple * @create: 2020-01-21 20:52 **/ public class IphoneFactory implements PhoneFactory{ @Override public Phone createPhone() { Iphone iphone = new Iphone(); iphone.setName("iphone手机"); return iphone; } }
/** * @className: Client * @description: 客户端 * @author: rainple * @create: 2020-01-21 21:06 **/ public class Client { public static void main(String[] args) { //iphone工厂 PhoneFactory phoneFactory = new IphoneFactory(); //创建iPhone手机 Phone phone = phoneFactory.createPhone(); System.out.println(phone.getName()); //华为工厂 phoneFactory = new HuaWeiFactory(); //创建华为手机 System.out.println(phoneFactory.createPhone().getName()); } }
1、遵循开闭原则,新增产品类时只需要增加相应的工厂以及产品即可,不需要修改原有的代码。
2、符合单一职责原则,每个工厂类只负责一种产品的创建
3、使用非静态方法来创建产品,利于后续对产品的拓展,可拓展性增加
标签:前言 url creat span rri 静态方法 oid huawei 缺点
原文地址:https://www.cnblogs.com/rainple/p/12227187.html