二、创建型模式——简单(静态)工厂模式
2018-03-29 09:25
274 查看
本文部分参考自JAVA与模式一、创建型模式简介创建型模式是对类的实例化过程的抽象化。一些系统在创建对象的时候,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建型模式描述了怎样构造和封装这些动态的决定。1.类的创建模式使用继承关系,把类的创建延迟到子类,从而封装了客户端得到了哪些具体类的信息,隐藏这些类的实例是如何被创建和放在一起的
2.对象的创建模式把对象的创建过程动态地委派给另一个对象,从而动态地决定客户端将得到哪些具体类的实例,以及这些类的实例是如何被创建和组合到一起的
简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
二、简单工厂模式(静态工厂方法模式)由工厂对象决定创建出哪一种产品的实例优点:(1)静态工厂方法有名称,比如一个类有两个构造方法,如果没有文档的时候用户就很难知道应该调用哪个构造方法(类多的时候很容易忘记构造函数是什么),这时候我们可以把它们写到工厂方法中,然后通过方法名来确定每个构造方法的意义,从而区别出什么时候应该调用什么构造方法。(2)它们可以返回原返回类型任意子类型的对象。(3如果类的构造器特别麻烦,或者泛型比较复杂,使用静态工厂方法就简便了这些操作(4)如果想更改接口引用的子类对象,主需要该工厂中的方法就可以(5)客户端免除了直接创建对象的责任(不需要知道对象是怎么创建的),而仅仅负责使用对象,实现了对责任的分割缺点类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了开-闭原则
四、简单工厂模式在Java中的应用DateFormat这个类是一个抽象类,内部提供多种静态方法public final static DateFormat getDateInstance();使用了多态和静态工厂方法,子类重写此方法后可以完成返回子类对象
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();使用了多态和静态工厂方法,子类重写此方法后可以完成返回子类对象
相关文章推荐
- 设计模式之创建型模式——简单工厂(又称为静态工厂不属于GOF23种设计模式以内)
- 设计模式——创建型设计模式总结(简单工厂、普通工厂、抽象工厂、建造者、原型和单例)
- 设计模式案例--工厂模式--简单工厂(静态工厂)(simplefactory)
- Golang设计模式-创建型-简单工厂
- Java技术_每天掌握一种设计模式(003)_使用场景及简单实例(创建型:工厂方法)
- 设计模式(2)-创建型-简单工厂,工厂,抽象工厂模式(Factory)
- 【23种设计模式】创建型模式 > 三个工厂模式(简单工厂、抽象工厂、工厂方法)
- [设计模式](二):工厂模式(简单工厂|静态工程、工厂方法|多工厂、抽象工厂)
- 创建型模式01:简单工厂模式、工厂方法模式、抽象工厂模式
- 创建型模式1.2简单工厂模式
- Java技术_每天掌握一种设计模式(004)_使用场景及简单实例(创建型:抽象工厂)
- 设计模式-创建型模式:简单工厂SimpleFactory
- 设计模式1:简单工厂模式【创建型】
- 2.Abstract Factory 抽象工厂(创建型模式)之简单工厂
- 设计模式-创建型-简单工厂模式
- [C#]设计模式-简单工厂-创建型模式
- 设计模式学习003——工厂模式(工厂方法、抽象工厂),简单工厂【也叫静态工厂】
- 创建型模式之一: 简单工厂模式
- C++设计模式从0进击-1-简单(静态)工厂模式
- 创建型模式_简单工厂