1.定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类,FactoryMethod使一个类的实例化延迟到其子类.
2.意识图
3.代码示例
联想工厂创建联想的电脑,戴尔创建戴尔的电脑
1)电脑接口
/** * 电脑接口 * [email protected] * 2017年12月25日 */ public interface Computer { /** * 描述-->一句话简介 * @param description 描述语 */ public void describe(String description); }
2).戴尔电脑
/** * Dell电脑 * [email protected] * 2017年12月25日 */ public class DellComputer implements Computer { @Override public void describe(String description) { System.out.println(description); } }
3).联想电脑
/** * Lenovo电脑 * [email protected] * 2017年12月25日 */ public class LenovoComputer implements Computer { @Override public void describe(String description) { System.out.println(description); } }
4).电脑工厂
/** * 电脑工厂 * [email protected] * 2017年12月25日 */ public class ComputerFactory { public static Computer buildComputer(String pcName) { if("dell".equalsIgnoreCase(pcName)) return new DellComputer(); if("lenovo".equalsIgnoreCase(pcName)) return new LenovoComputer(); return null; } }
5).电脑操作类
/** * 电脑操作类,调用工厂创建电脑 * [email protected] * 2017年12月25日 */ public class ComputerOperator { /** * 创建电脑 * @param pcName 电脑名字 * @param description 电脑描述 */ public void createComputer(String pcName,String description) { ComputerFactory.buildComputer(pcName).describe(description); } }
6).客户端类
/** * 客户端 * [email protected] * 2017年12月25日 */ public class Client { public static void main(String[] args) { ComputerOperator computerOperation = new ComputerOperator(); computerOperation.createComputer("lenovo", "我是联想"); computerOperation.createComputer("dell", "我是戴尔"); } }
7).结果
我是联想 我是戴尔
4.总结
何时选用?
1).一个接口多个实现,但是又不知道具体用哪一个实现,由子类去指定
2).系统设计本身就由子类去指定实现类
原文地址:https://www.cnblogs.com/wuyanlin/p/8111602.html
时间: 2024-10-18 12:38:44