设计模式学习(一)——工厂方法模式【Factory Method Pattern】
2014-03-07 15:22
260 查看
参考书——《HeadFirst设计模式》
(提醒:在设计模式中,所谓的“实现一个接口”,并不一定表示“写一个类,并利用implements关键字来实现某个Java接口”。“实现一个接口”泛指:实现某个超类型(可以是类or接口)的某个方法)
工厂方法用来处理对象的创建,并将这样的行为分装在子类中。这样,客户端程序中关于超类的代码就和子类对象创建代码解耦了。
abstract Product factoryMethod (String
Type) ;
1.工厂方法是抽象的,所以依赖子类来处理对象的创建。
2.工厂方法必须返回一个产品。超类中定义的方法,通常使用到工厂方法的返回值。
3.工厂方法将客户和实际创建具体产品的代码分隔开来。
4.工厂方法可能需要(也可能不需要)参数来指定所要的产品。
Factory Method Pattern 通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。
正式定义:工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
抽象的创建者类(Creator)提供了一个创建对象的方法接口(也成为“工厂方法”),在抽象的Creator中,任何其他实现的方法,都可能使用到这个工厂方法所生产出来的产品。但只有子类正真实现这个方法并生产产品。
定义中的“决定”,并不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际创建的产品是哪一个,选择了使用了哪个子类,自然就决定了实际创建的产品是哪一个。
Creator这个抽象类实现了所有操纵产品的方法,但不实现工厂方法。
来看下它的组成:
1)抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2)具体工厂角色:它含有和具体业务逻辑有关的代码。
3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
当你直接实例化一个对象时,就是在依赖它的具体类。
这里插入些依赖倒置的一些知识 依赖倒置——不能让高层组件依赖低层组件,而且,不管是高层or低层组件,都应该依赖于抽象。所谓高层组件是由其他低层组件定义其行为的类。
======================================================================================================
再补充下简单工厂模式(因为《HeadFirst设计模式》中没有单独来说),又称静态工厂方法模式(Static Factory MethodPattern)。
简单工厂涉及到三个角色:
1. 工厂类角色:往往由一个具体的类实现。里面的工厂方法和上面的抽象工厂角色的工厂方法不同:a.不是抽象的、b.用static修饰
2. 抽象产品角色
3. 具体的产品
(提醒:在设计模式中,所谓的“实现一个接口”,并不一定表示“写一个类,并利用implements关键字来实现某个Java接口”。“实现一个接口”泛指:实现某个超类型(可以是类or接口)的某个方法)
工厂方法用来处理对象的创建,并将这样的行为分装在子类中。这样,客户端程序中关于超类的代码就和子类对象创建代码解耦了。
abstract Product factoryMethod (String
Type) ;
1.工厂方法是抽象的,所以依赖子类来处理对象的创建。
2.工厂方法必须返回一个产品。超类中定义的方法,通常使用到工厂方法的返回值。
3.工厂方法将客户和实际创建具体产品的代码分隔开来。
4.工厂方法可能需要(也可能不需要)参数来指定所要的产品。
Factory Method Pattern 通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。
正式定义:工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
抽象的创建者类(Creator)提供了一个创建对象的方法接口(也成为“工厂方法”),在抽象的Creator中,任何其他实现的方法,都可能使用到这个工厂方法所生产出来的产品。但只有子类正真实现这个方法并生产产品。
定义中的“决定”,并不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际创建的产品是哪一个,选择了使用了哪个子类,自然就决定了实际创建的产品是哪一个。
Creator这个抽象类实现了所有操纵产品的方法,但不实现工厂方法。
来看下它的组成:
1)抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2)具体工厂角色:它含有和具体业务逻辑有关的代码。
3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
当你直接实例化一个对象时,就是在依赖它的具体类。
这里插入些依赖倒置的一些知识 依赖倒置——不能让高层组件依赖低层组件,而且,不管是高层or低层组件,都应该依赖于抽象。所谓高层组件是由其他低层组件定义其行为的类。
======================================================================================================
再补充下简单工厂模式(因为《HeadFirst设计模式》中没有单独来说),又称静态工厂方法模式(Static Factory MethodPattern)。
简单工厂涉及到三个角色:
1. 工厂类角色:往往由一个具体的类实现。里面的工厂方法和上面的抽象工厂角色的工厂方法不同:a.不是抽象的、b.用static修饰
2. 抽象产品角色
3. 具体的产品
相关文章推荐
- 设计模式学习总结-工厂方法模式(Factory Method Pattern)
- 设计模式学习笔记--工厂方法模式(Factory Method Pattern)【创建型模式】
- 设计模式学习总结-工厂方法模式(Factory Method Pattern)
- .Net设计模式学习笔记(五):工厂方法模式(Factory Method)
- Java设计模式——创建型模式——工厂方法模式(Factory METHOD Pattern)
- 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
- 设计模式学习(创建型模式)—工厂方法模式(Factory Method)
- 设计模式拾荒之工厂方法模式(Factory Method Pattern): 简单工厂并不是一种设计模式
- JAVA设计模式之 工厂方法模式【Factory Method Pattern】
- 设计模式学习之四(中)工厂方法模式(Factory Method)—让别人进行比萨店加盟
- 设计模式-工厂方法模式(Factory Method Pattern)
- 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
- C#设计模式之工厂方法模式(Factory Method Pattern)
- 设计模式——工厂方法模式【Factory Method Pattern】
- 设计模式-工厂方法模式(factoryMethod pattern)
- 设计模式(创建型)之工厂方法模式(Factory Method Pattern)
- 设计模式5 - 工厂方法模式【Factory Method Pattern】
- java设计模式——工厂方法模式(Factory Method Pattern)
- 步步为营 .NET 设计模式学习笔记 二十四、Factory Method(工厂方法模式)