工厂方法模式
来源:互联网 发布:中国人种基因知乎 编辑:程序博客网 时间:2024/06/16 14:37
工厂方法模式——Factory Method Pattern
定义:
定义一个创建对象的接口,让一个实例对象的创建延迟到该接口的子类。
工厂方法模式的4个角色:
- Product:抽象产品,具体产品的父类。
- ConcreteProduct:具体产品,其实例对象由具体工厂创建,与具体工厂一一对应。
- Factory:抽象工厂,是具体工厂的父类,用于创建产品对象,但具体的创建过程由具体工厂实现。
- ConcreteFactory:具体工厂,生产具体产品对象。
/** * 抽象产品接口:手机接口 */public interface Phone { void describe();}/** * 具体产品类:SamSung手机 */public class SamSungPhone implements Phone { @Override public void describe() { System.out.println("我是SamSung手机!"); }}/** * 具体产品类:HuaWei手机 */public class HuaWeiPhone implements Phone { @Override public void describe() { System.out.println("我是HuaWei手机!"); }}/** * 具体产品类:Mi手机 */public class MiPhone implements Phone { @Override public void describe() { System.out.println("我是Mi手机!"); }}/** * 抽象工厂接口:用于生产Phone实例对象 */public interface Factory { Phone createPhone();}/** * 具体工厂类:SamSung工厂 */public class SamSungFactory implements Factory { @Override public Phone createPhone() { System.out.println("SamSung手机正在创建中..."); return new SamSungPhone(); }}/** * 具体工厂类:HuaWei工厂 */public class HuaWeiFactory implements Factory { @Override public Phone createPhone() { System.out.println("HuaWei手机正在创建中..."); return new HuaWeiPhone(); }}/** * 具体工厂类:Mi工厂 */public class MiFactory implements Factory { @Override public Phone createPhone() { System.out.println("Mi手机正在创建中..."); return new MiPhone(); }}/** * 客户端 */public class Client { public static void main(String[] args) { Factory factory = new HuaWeiFactory(); Phone phone = factory.createPhone(); phone.describe(); }}// 运行结果:HuaWei手机正在创建中...我是HuaWei手机!
注意: 工厂方法不能是静态的,因为工厂方法由抽象工厂声明定义,是抽象的,因此无法声明为静态的。
工厂方法模式的优缺点:
- 优点:
- 解决了简单工厂模式在扩展时需要修改源码的缺点,扩展时只需成对地增加或减少具体产品类与具体工厂类,并让其实现抽象产品接口与抽象工厂接口。
- 缺点:
- 当增加新产品时,类的数量会成对增加。
- 引入了抽象层,在一定程度上增加了实现难度。
使用场景:
- 客户端不知道所需的对象的类。
- 对象的创建由具体工厂负责。
阅读全文
0 0
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- 11.6考试爆炸记
- 脚手架搭建react项目
- PLSQL远程连接Oracle数据库
- selenium实战:如何解决无论如何都无法定位的点击展开元素问题
- Activity(1)---搭建环境
- 工厂方法模式
- 再来看看堆栈清楚多了
- Verilog实现同步整形电路的原理及代码解析
- EA&UML日拱一卒-状态图::不是模式的模式
- Jzoj5409 Fantasy
- SSRF漏洞分析与利用
- 多个关联表数据库查询和hql的区别
- (6)OGNL--1:访问值栈中的普通属性、对象属性、普通方法、静态方法、自写set、map、list
- mybatis入门配置