设计模式_创建型模式——工厂方法
来源:互联网 发布:淘宝品牌授权怎么弄 编辑:程序博客网 时间:2024/06/07 18:21
工厂方法(Factory Method):工厂方法模式属于类的创建型模式。在工厂方法模式中,父类负责定义创建产品对象的工厂接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化哪一个类。
abstract Product factoryMethod(String type)
abstract:工厂方法是抽象的,依赖子类来处理对象的创建
Product:工厂方法返回一个产品,超类中定义的方法,通常使用到工厂方法的返回值
String:工厂方法可能需要参数来指定所要的产品
工厂方法的元素有:
A)创建者类:一个抽象的创建者类,它定义一个抽象的创建者类,它定义了一个抽象的方法,让子类实现此方法制造产品;创建者通常会包含依赖于抽象产品的代码,而这些抽象产品由子类制造,创建者不需要真的知道制造哪种具体产品;多个能够产生产品的具体类,
由于产品是在具体类实现的,所以具体类可以创建具有自己特色的产品。
B)产品类:一个抽象产品, 多个具体产品;
工厂方法模式应用场景:
1.当一个类不知道它所必须创建的对象的类的时候
2.当一个类希望由它的子类来指定它所创建的对象的时候
3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将那一个帮助子类是代理者这一信息局部化的时候
工厂方法相较于简单工厂模式的有点:
a)工厂方法相较于简单工厂模式,工厂方法更符合开放-封闭原则。
b)工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码进行,想要增加功能,简单工厂是修改工厂类,而工厂方法模式修改的是客户端。
一抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只创建一个具体产品类的实例。
以披萨店为例子,PizzaStore为披萨总店(父类), NYPizzaStore为纽约披萨分店(子类)
以下是它的UML图
public abstract class PizzaStore {
abstract Pizza createPizza(String item);
public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type);
System.out.println("--- Making a " + pizza.getName() + " ---");
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
工厂方法模式:披萨总店有两个方法,一个是创建对象的createPizza,createPizza()是抽象方法,只有在子类实现具体的类型。
public class NYPizzaStore extends PizzaStore {
Pizza createPizza(String item) {
if (item.equals("cheese")) {
return new NYStyleCheesePizza();
} else if (item.equals("veggie")) {
return new NYStyleVeggiePizza();
} else if (item.equals("clam")) {
return new NYStyleClamPizza();
} else if (item.equals("pepperoni")) {
return new NYStylePepperoniPizza();
} else return null;
}
}
工厂方法模式:在子类中必须实现createPizza(), 因为它在PizzaStore中是抽象的
由子类全权决定实例化哪个对象。
- 设计模式_创建型模式——工厂方法
- 创建型设计模式——工厂方法模式
- 第一篇、创建型设计模式——简单工厂模式(静态工厂方法模式)
- 设计模式-创建型模式-工厂方法
- 【设计模式】创建型模式-工厂方法
- 创建型模式—工厂方法模式
- Java设计模式_(创建型)_工厂模式
- Java设计模式_(创建型)_抽象工厂模式
- 创建型模式_工厂方法
- 设计模式(对象创建)——工厂方法模式
- 设计模式——创建型模式之工厂模式
- 设计模式2——创建型模式之工厂方法模式
- 设计模式学习(创建型模式)—工厂方法模式(Factory Method)
- Java设计模式_创建模式_工厂模式
- 大话设计模式_工厂方法模式
- 设计模式03_工厂方法模式
- 设计模式_工厂方法模式
- 设计模式_工厂方法模式(Java)
- Android Studio下修改Module名称
- ComboPooledDataSource 详细配置说明
- Qt中QString与基本类型的转换问题
- 《C程序设计语言》--字符数组的应用
- 高歌——【先声夺银】4,16午间:周四惯性上涨 反弹就做空的机会
- 设计模式_创建型模式——工厂方法
- Spring AOP 实现原理与 CGLIB 应用
- ScrollView实现阻尼回弹效果!
- COM笔记-QueryInterface函数
- time_wait和close_wait
- OC相关
- python安装
- Activiti5工作流实战开发视频教程
- “师创杯”精英赛G---限额逃生2(BFS)---已AC+错误分析