工厂方法 Factory Method
Posted 有且仅有
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂方法 Factory Method相关的知识,希望对你有一定的参考价值。
父博文地址:设计模式 - Design Patterns
一、是什么?
作用
当我在超类中写操作产品的业务逻辑,而想把创建产品的行为推迟到子类时,我可以使用工厂方法。
将客户(超类中的业务代码)和具体创建对象的代码解耦。
行为
- 工厂方法利用继承,把创建对象的工作推迟到子类(在子类覆盖工厂方法创建对象)。
二、实例
上面类图的实现
Creator
代码:public abstract class Creator public Product bizMethod(String type) Product product = createProduct(type); // product.othersMethod(); // product.othersMethod(); // product.othersMethod(); return product; protected abstract Product createProduct(String type);
Client
代码:public class Client public static void main(String[] args) Creator creator = new ConcreteCreatorA(); Product p = creator.bizMethod("A"); System.out.println(p.getClass().getSimpleName());
三、问答
和简单工厂的区别?
它们很类似,但用法不同。某一个具体的创建者子类看起来都很像是一个“简单工厂”。所以工厂方法的特点就是,这里有抽象类、有继承、依赖覆盖方法来创建对象。
工厂方法是否必须是
abstract
的?不是,可以定义一个有方法体的工厂方法来创建某个具体产品,这样即使没有子类也可以创建产品。(此时与简单工厂的区别就是简单工厂还可以是
static
的)。所以依赖的原则?
依赖倒置原则:高层不应该依赖于低层,高层和低层都应该依赖于抽象。
Creator 不依赖于ConcreteProductA,Creator和ConcreteProductA都只依赖于Product。
以上是关于工厂方法 Factory Method的主要内容,如果未能解决你的问题,请参考以下文章