工厂方法模式
来源:互联网 发布:linux查找rpm包位置 编辑:程序博客网 时间:2024/06/14 08:51
工厂方法模式
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式的核心是封装类中不变的部分,将可变的部分独立成额外的类,将实际的创建工作延迟到之类当中,代码会相对灵活一些。
工厂方法模式涉及到4个部分:
- 产品接口:定义产品规范,通常是接口或抽象类。
- 具体产品:实现产品接口的具体类。
- 工厂接口:定义实例化产品类的规范,通常是接口或抽象类。
- 具体工厂:实现工厂接口的具体类,决定实例化何种产品。
笔者下文例子中的频道类对应了产品接口,卡通频道和新闻频道是具体产品,而频道工厂则相当于工厂接口,卡通频道工厂和新闻频道工厂起到了具体工厂的作用。
- 频道
public interface Channel { void watch();}
- 卡通频道
public class Cartoon implements Channel { @Override public void watch() { System.out.print("watch cartoon"); }}
- 新闻频道
public class News implements Channel { @Override public void watch() { System.out.print("watch news"); }}
- 频道工厂
public interface ChannelFactory { Channel createChannel();}
- 卡通频道工厂
public class CartoonFactory implements ChannelFactory { @Override public Channel createChannel() { return new Cartoon(); }}
- 新闻频道工厂
public class NewsFactory implements ChannelFactory { @Override public Channel createChannel() { return new News(); }}
- 客户端测试类
public class Client { public static void main(String[] args) { ChannelFactory channelFactory = new CartoonFactory(); Channel channel = channelFactory.createChannel(); channel.watch(); }}
运行结果:
watch cartoon
工厂方法模式之比于简单工厂模式,工厂方法模式实现时,客户端需要决定实例化哪一个工厂来创建产品实现类,选择判断的问题还是存在。也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类,而现在是修改客户端。
简单工厂模式还是存在着对修改的开放问题,而工厂方法模式更好地实现了开闭原则。
但是工厂方法模式显著地增加了类的数量,每一个产品都需要对应一个工厂。并且增加了客户端调用类的负担,客户端调用类需要知道各个工厂的存在。
1 0
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- 【深入Java虚拟机】之八:Java垃圾收集机制
- echarts如何让坐标轴的数据显示完全
- linux下普通文件和目录文件区别
- Tkinter(python-GUI)
- redis集群搭建
- 工厂方法模式
- Java基础:面向对象(1)--对象的概念、成员变量与局部变量、匿名对象、类的封装
- Flask-自定义头像
- Mac 最新cocoapods安装流程
- 使用danmuplayer.js插件实现Java web网站视频发弹幕
- Android OpenGL使用GLSurfaceView预览视频
- Android 一个Activity的生命周期
- Viewpage使用
- 【Oracle】表追加字段