创建型模式 | 简单工厂模式解析及应用

一、定义

简单工厂模式又叫静态方法模式,是一种创建型模式。(工厂类定义了一个静态方法)

简单工厂模式将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。
客户可直接消费产品而不需要知道其生产的细节。

二、特点

优点:

  • .将创建实例的与使用实例的分开,客户不必关心类对象如何创建,实现解耦;
  • 更符合面向对象的原则—面向接口编程,而不是面向实现编程。
    缺点:
  • 工厂类集中了所有实例的创建逻辑,这个工厂不能正常工作,会影响整个系统;
  • 违背“开闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,工厂逻辑过于复杂;
  • 简单工厂模式使用了静态方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。

三、使用场景

  • 当工厂类负责创建的对象(具体产品)比较少时;
  • 客户只需知道传入工厂类的参数,对于如何创建对象的逻辑不关心时;

四、类图

在这里插入图片描述
角色:
抽象产品(Product): 具体产品的父类, 描述产品的公共接口
具体产品(Concrete Product): 抽象产品的子类,描述生产的具体产品
工厂(Facrory): 被外界调用,根据传入参数从而创建具体产品类

五、实战代码

使用简单工厂模式实现一个工厂对3款产品的生产

步骤1. 创建抽象产品类

【Product .java】
public abstract class Product {
	 public abstract void show();  //声明一个抽象方法
}

步骤2. 创建具体产品类

【ProductA .java】
public class ProductA extends Product{
//具体产品类A
	@Override
	public void show() {
		System.out.println("生产了A产品");	
	}
}
【ProductB .java】
public class ProductB extends Product {
//具体产品类B
	@Override
	public void show() {
		System.out.println("生产了B产品");	
	}
}
【ProductC .java】
public class ProductC extends Product {
//具体产品类C
	@Override
	public void show(){
		System.out.println("生产了C产品");
	}
}

步骤3. 创建工厂类

【ProductFactory .java】
public class ProductFactory {
	public static Product Creat(String ProductName){
		//工厂类里用if语句控制生产哪种商品;
		if("A".equals(ProductName))
			return new ProductA();
		if("B".equals(ProductName))
			return new ProductB();
		if("C".equals(ProductName))
			return new ProductC();
		return null;
	}
}

步骤4. 客户端传入不同参数创建不同具体产品类

【ClientClass.java】
public class ClientClass {
	//使用者可直接消费产品而不需要知道其生产的细节
	public static void main(String[] args) {
        //ProductFactory类使用if控制生产产品
		ProductFactory factory = new ProductFactory();
		factory.Creat("A").show();
		factory.Creat("B").show();
		factory.Creat("C").show();
	}
}

【运行截图】

在这里插入图片描述


喜欢的话记得点赞收藏哟😊
Java设计模式—博文专栏持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雄不是大熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值