Android重拾设计模式系列——工厂方法模式
来源:互联网 发布:日式rpg 知乎 编辑:程序博客网 时间:2024/06/14 13:50
工厂方法模式和简单工厂模式本质是类似的,都是用来封装产品的创建过程。但它们的实现也有很大的,所以通常被作为两种不同的设计模式看待。
简单工厂模式传送门
定义及实质
- 定义
定义一个用于创建对象的接口,让子类决定实例化那一个对象,即使一个类的实现延迟到子类实现。 - 实质
延迟到子类选择实现。
虽然都是选择实现,但工厂方法模式主要用于创建一系列的产品簇(就是相似的东西),而简单工厂法可以创建任何互相没有关联的实例。
模式图解
工厂方法模式UML图
从上图可以看出:
1. Creator是抽象父类,ConcreteCreator是其子类;
2. ConcreteCreator重写了父类的factoryMethod() 来创建真正的产品ConcreteProduct,也就是说ConcreteCreator依赖ConcreteProduct;需要注意,Creator依赖的是Product;
3. ConcreteProduct实现了Product接口。
//Creatorpublic abstract class Creator{ public abstrat Product factoryMethod(); public void someOpration(){ //在这里延迟创建了Product factorMethod().doSomthing(); }}//ConcreteCreatorpublic class ConcreteCreator extends Creator{ @Overrid public Product factoryMethod(){ return new ConcreteProduct(); }}//Productpublic interface Product{ void doSomthing();}//public class ConcreteProduct implement Product{ @Overrid public void doSomthing(){ System.out.println("ConcreteProduct"); }}
下面看看Client怎么使用:
public class Client{ priavte Creator creator; public static void main(String[] args){ creator = new ConcreteCreator(); //创建符合需求的Creator子类 creator.someOpration(); //调用这个方法才会创建Product }}
工厂方法模式顺序图
结合上面的代码看。
模式优缺点
优势
- 体现了依赖倒置 的原则,使程序的可扩展性增强,当有新需求时,只需要增加新的Creator子类,替换Client中的子类,而不需要修改其它地方;
- 可以在不知道对象创建过程未确定的情况下进行编程;
- 可以很好的链接平行类层次结构。
缺点
- 工厂类和产品类耦合在一起。
拓展
平行类层次结构
指一个类层级(工厂方法模式中,每个Creator的抽象就代表着一个类层级)中的每一个类,在另一个类层级中都有对应的类与之呼应,这样的一组类层就称为平行类层次结构 。
解释:
以Shape为例,具体的Shape对象和Shape对象的行为就构成了平行类层次结构。Shape对象层级中有Rectangle、Oval等,在Shape对象行为层级中,有Rectangle、Oval等的面积、周长等行为与之对应。所以它们构成了平行类层次结构。
1 0
- Android重拾设计模式系列——工厂方法模式
- Android重拾设计模式系列——简单工厂模式
- Android重拾设计模式系列——抽象工厂模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- 工厂方法——设计模式系列
- 工厂方法——设计模式系列
- Android重拾设计模式系列——外观模式
- 重学设计模式——工厂方法模式
- android studio 处理.9图片问题
- noiopenjudge07:矩阵归零消减序列和 模拟
- Spring Boot B-JUI项目快速开发(一)
- WCF服务:HTTP 无法注册 URL http://+:8000 进程不具有此命名空间的访问权限
- 匿名函数
- Android重拾设计模式系列——工厂方法模式
- App启动优化最佳实践
- 实习生的感悟,最近不踏实
- Python面向对象编程
- 架构 - 第四课:git分支管理
- 对匿名函数的深入理解(彻底版)
- DOM4J解析XML文档报错document root element is missing
- 关于统计变换(CT/MCT/RMCT)算法的学习和实现,也称为局部二进制模式(LBP)
- C++读取txt文件获取txt文件行数