设计模式-静态工厂模式

静态工厂模式

引言

追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. 每多增加一个产品类,都需要增加一个额外的具体产品类和该类的实现工厂,这很明显地违背了开闭原则,增加了系统的复杂度。此外,这种“牵一发而动全身”的写法,很容易使系统出错。

和大家的分享就到这吧!有收获的可以下博主。同时也欢迎各位Java工程师朋友们加入Java架构进阶:777584112
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,
MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)

 

 

猜你喜欢

转载自blog.csdn.net/qq_36860032/article/details/89386435
今日推荐