我是靠谱客的博主 无语大雁,最近开发中收集的这篇文章主要介绍二、创建型模式——简单(静态)工厂模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文部分参考自JAVA与模式

一、创建型模式简介
创建型模式是对类的实例化过程的抽象化。一些系统在创建对象的时候,需要 动态地决定怎样创建对象,创建哪些对象 ,以及如何组合和表示这些对象。创建型模式 描述了怎样构造和封装这些动态的决定
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();
使用了多态和静态工厂方法,子类重写此方法后可以完成返回子类对象



最后

以上就是无语大雁为你收集整理的二、创建型模式——简单(静态)工厂模式的全部内容,希望文章能够帮你解决二、创建型模式——简单(静态)工厂模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部