浅谈简单工厂模式

简单说两句

作者:后端小知识

CSDN个人主页:后端小知识

GZH后端小知识

欢迎关注点赞收藏⭐️留言

浅谈简单工厂模式_第1张图片

简单工厂模式

定义

定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类

角色
  1. 工厂角色 factory

  2. 抽象产品 product

  3. 具体产品 concreteproduct

模式类图

浅谈简单工厂模式_第2张图片

核心代码类(demo)

举个例子:

告诉工厂需要的手机名称,然后工厂生成手机

类图

浅谈简单工厂模式_第3张图片

我们编写代码的顺序:

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.客户端无需知道具体产品的类名,只需知道具体产品所对应的参数

模式缺点
  1. 工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响
  2. 增加系统中类的个数(引入了新的工厂类),增加了系统的复杂度和理解难度
  3. 系统扩展困难一旦添加新产品不得不修改工厂逻辑
  4. 由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构,工厂类不能得到很好地扩展
模式适用环境
  1. 工厂类负责创建的对象比较少,这样的话不会造成工厂类业务太复杂
  2. 客户端只知道传入工厂类的参数,对于如何创建对象并不关心

好啦,就到这里啦,简单工厂模式总体来说来说很容易理解的啦,若有疑问的友友欢迎评论区留言额

浅谈简单工厂模式_第4张图片

结语

谢谢你的阅读,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!

作者:后端小知识

CSDN个人主页:后端小知识

GZH后端小知识

欢迎关注点赞收藏⭐️留言

你可能感兴趣的:(#,设计模式篇,java,servlet,后端)