🚗简单工厂模式
定义
定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类
角色
- 工厂角色 factory
- 抽象产品 product
- 具体产品 concreteproduct
模式类图
🍓核心代码类(demo)
举个例子:
告诉工厂需要的手机名称,然后工厂生成手机
类图
我们编写代码的顺序:
Mobile > 具体Product > MobileFactory
Mobile.java
抽象产品
public abstract class Mobile { protected String name; protected float price; public String getName() { return name; } public void setName(String name) { this.name = name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public abstract void call(); }
MiProduct.java
具体产品
public class MiProduct extends Mobile { public MiProduct(){ this.name="Mi"; this.price=3000; } @Override public void call() { System.out.println("我的小米"); } }
MobileFactory.java
工厂
public class MobileFactory { public static Mobile createMobile(String name) { Mobile mobile = null; if(Objects.equals(name, "Vivo")){ mobile = new VivoProduct(); }else if(Objects.equals(name, "Mi")){ mobile = new MiProduct(); } return mobile; } }
客户端
public class Client { public static void main(String[] args) { // 1.购买手机 Mobile m = MobileFactory.createMobile("Vivo"); // 2.使用手机 m.call(); } }
模式优点
1.对象的创建与使用是分离的
2.客户端无需知道具体产品的类名,只需知道具体产品所对应的参数
模式缺点
- 工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响
- 增加系统中类的个数(引入了新的工厂类),增加了系统的复杂度和理解难度
- 系统扩展困难,一旦添加新产品不得不修改工厂逻辑
- 由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构,工厂类不能得到很好地扩展
模式适用环境
- 工厂类负责创建的对象比较少,这样的话不会造成工厂类业务太复杂
- 客户端只知道传入工厂类的参数,对于如何创建对象并不关心
好啦,就到这里啦,简单工厂模式总体来说来说很容易理解的啦,若有疑问的友友欢迎评论区留言额😘
结语