您的位置:首页 > 编程语言 > Java开发

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

2018-03-29 09:25 274 查看
本文部分参考自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();使用了多态和静态工厂方法,子类重写此方法后可以完成返回子类对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐