二、创建型模式——简单(静态)工厂模式

2023-12-15 11:34:26

??微信公众号转载,关注微信公众号掌握更多技术动态

---------------------------------------------------------------

一、创建型模式简介

创建型模式是对类的实例化过程的抽象化。一些系统在创建对象的时候,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建型模式描述了怎样构造和封装这些动态的决定

1.类的创建模式

使用继承关系,把类的创建延迟到子类,从而封装了客户端得到了哪些具体类的信息,隐藏这些类的实例是如何被创建和放在一起的

2.对象的创建模式

把对象的创建过程动态地委派给另一个对象,从而动态地决定客户端将得到哪些具体类的实例,以及这些类的实例是如何被创建和组合到一起的

简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

二、简单工厂模式(静态工厂方法模式)

由工厂对象决定创建出哪一种产品的实例

优点:

(1)静态工厂方法有名称,比如一个类有两个构造方法,如果没有文档的时候用户就很难知道应该调用哪个构造方法(类多的时候很容易忘记构造函数是什么),这时候我们可以把它们写到工厂方法中,然后通过方法名来确定每个构造方法的意义,从而区别出什么时候应该调用什么构造方法。

(2)它们可以返回原返回类型任意子类型的对象。

(3如果类的构造器特别麻烦,或者泛型比较复杂,使用静态工厂方法就简便了这些操作

(4)如果想更改接口引用的子类对象,主需要该工厂中的方法就可以

(5)客户端免除了直接创建对象的责任(不需要知道对象是怎么创建的),而仅仅负责使用对象,实现了对责任的分割

缺点

类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了开-闭原则

public class Factory {   
????public static Person getP(){
????return new Student() ;
}
}

2.复杂静态工厂

/*
 * 静态工厂方法
 * 本例中Fruit为基类 ,Banana、Apple、Strawberry为其的派生类
 */
public class FruitGardener {
	public static Fruit fruitFactory(String which)throws FruitNotFindException
	{
		if(which.equalsIgnoreCase("apple"))
		{
			return new Apple();
		}
		else if(which.equalsIgnoreCase("banana"))
		{
			return new Banana();
		}
		else if(which.equalsIgnoreCase("strawberry"))
		{
			return new Strawberry();
		}
		else{
			throw new FruitNotFindException("not exist");
		}		
	}
}

我们可以将三个角色合并为一个角色,在具体产品类中,添加静态工厂方法从而完成了静态工厂方法模式的退化

三、简单工厂模式和其它模式的关系

1.单例模式---》多例模式--》备忘录模式

单例模式使用了静态工厂模式,也就是单例类中有一个静态工厂方法提供自身的实例。与退化版静态工厂模式不同的是:

(1)单例类的构造函数是私有的

(2)单例类自身是自己的工厂角色

四、简单工厂模式在Java中的应用

DateFormat

这个类是一个抽象类,内部提供多种静态方法

public final static DateFormat getDateInstance();

使用了多态和静态工厂方法,子类重写此方法后可以完成返回子类对象


?

文章来源:https://blog.csdn.net/qq_39403646/article/details/135010848
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。