设计模式-静态工厂模式

静态工厂模式

引言

追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

正文

工厂模式是我们最常见的实例化对象的模式了,它可以使开发者在实例化对象的时候省去**new()**这一步,需要什么类的实例就可以去创建一个。工厂模式属于创建型模式之一。

应用实例

我想吃一个水果,直接去工厂里去拿即可,二不用管这个水果是从哪里种的,以及是如何浇水施肥的,只需要告诉工厂你是想吃苹果还是梨子即可。

具体步骤

步骤1

创建一个水果的抽象类:

public abstract class Fruit {
	
	public abstract void eat();
	
}
复制代码

步骤2

创建继承抽象类的实体类:

苹果类:

public class Apple extends Fruit {

	@Override
	public void eat() {
		System.out.println("I wanna an apple");

	}

}
复制代码

香蕉类:

public class Banana extends Fruit {

	@Override
	public void eat() {
		System.out.println("I wanna a banana");

	}

}
复制代码

梨子类:

public class Pear extends Fruit {

	@Override
	public void eat() {
		System.out.println("吃一个梨");

	}

}
复制代码

步骤3

创建一个工厂,使其可以根据传递过来的参数来实例化相应的对象。

public class FruitFactory {

	public static Fruit createFruit(String type) {
		Fruit mFruit = null;
		switch (type) {
		case "Apple":
			mFruit = new Apple();
			break;
		case "Banana":
			mFruit = new Banana();
			break;
		case "Pear":
			mFruit = new Pear();
			break;
		default:
			break;
		}
		return mFruit;
	}

}

复制代码

步骤4

用户使用该工厂:

public class EatFruit {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FruitFactory.createFruit("Apple").eat();
		FruitFactory.createFruit("Banana").eat();
		FruitFactory.createFruit("Pear").eat();
	}

}
复制代码

总结

使用场景

所需要创建的类的数量不是很多的场景下,可以考虑使用静态工厂模式。

优缺点

优点
  1. 静态工厂可以根据用户传入的参数来动态地实例化对象,避免一次性实例化所有对象所带来的性能浪费,同时也降低了耦合性。
缺点
  1. 每多增加一个产品类,都需要增加一个额外的具体产品类和该类的实现工厂,这很明显地违背了开闭原则,增加了系统的复杂度。此外,这种“牵一发而动全身”的写法,很容易使系统出错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值