工厂方法模式
来源:互联网 发布:unity3d project 编辑:程序博客网 时间:2024/06/15 03:24
工厂方法模式
工厂方法模式是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。
定义一个抽象工厂和抽象产品,根据实际情况实例化具体的工厂就可获得的相应的产品。
具体角色
抽象工厂(Creator)角色:工厂方法模式的核心,任何在模式中创建对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:实现抽象工厂的具体工厂类,受到应用程序调用产生具体产品对象。
抽象产品(Product)角色:产品对象的共同父类或共同接口。
具体产品(Concrete Product)角色:实现了抽象产品的具体产品类。具体产品都有专门的具体工厂创建。
例:
需求:
现在有志愿者和学生都帮忙打扫卫生。
代码实现:
抽象工厂
/** * 工厂方法模式 * 抽象工厂角色:帮助者工厂 * 定义创建帮助者的方法 */public interface HelperFactory { Helper createHelper();}
抽象产品/** * 工厂方法模式 * 抽象产品角色:帮助者 * 定义帮助的方法 */public interface Helper { void cleanHome();}
具体工厂
/** * 工厂方法模式 * 具体工厂角色:志愿者帮助者工厂 * 创建志愿者帮助者 */public class VolunteerHelperFactory implements HelperFactory{ @Override public Helper createHelper() { // TODO Auto-generated method stub return new VolunteerHelper(); }}
/** * 工厂方法模式 * 具体工厂角色:学生帮助者工厂 * 创建学生帮助者 */public class StudentHelperFactory implements HelperFactory{ @Override public Helper createHelper() { // TODO Auto-generated method stub return new StudentHelper(); }}
具体产品
/** * 工厂方法模式 * 具体产品角色:学生帮助者 * */public class StudentHelper implements Helper{ @Override public void cleanHome() { // TODO Auto-generated method stub System.out.println("偶尔帮忙打扫家里卫生"); }}
/** * 工厂方法模式 * 具体产品角色:志愿者帮助者 * */public class VolunteerHelper implements Helper { @Override public void cleanHome() { // TODO Auto-generated method stub System.out.println("长期帮忙打扫家里卫生"); }}
客户端
public class Client { public static void main(String[] args) { HelperFactory helperOneFactory=new StudentHelperFactory(); Helper helperOne=helperOneFactory.createHelper(); helperOne.cleanHome(); HelperFactory helperTwoFactory=new VolunteerHelperFactory(); Helper helperTwo=helperTwoFactory.createHelper(); helperTwo.cleanHome(); }}
阅读全文
0 0
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- Alex网络结构详解
- 【cmd】Start命令详解
- 安装使用docker中用到的linux命令
- 利用Prism的IEventAggregator事件聚合器来实现ViewModel之间的通讯
- 查看Oracle数据库中表空间信息的命令方法
- 工厂方法模式
- PHP对根据某字段对二维数组进行排序函数
- 导入Git IDEA工程
- Maven项目中,关于Spring Boot 整合MyBatis时,Service层无法找到mapper接口的问题解决
- WPF中XAML中使用String.Format格式化字符串示例
- 少儿python海龟画图编程汉化增强版说明档案 (turtle库中文翻译)
- leetcode-- two sum
- CCF——火车购票
- mqtt实现自动监听服务器消息