二、创建型模式——简单(静态)工厂模式
??微信公众号转载,关注微信公众号掌握更多技术动态
---------------------------------------------------------------
一、创建型模式简介
创建型模式是对类的实例化过程的抽象化。一些系统在创建对象的时候,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建型模式描述了怎样构造和封装这些动态的决定。
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();
使用了多态和静态工厂方法,子类重写此方法后可以完成返回子类对象
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!