标签:return 制造 简单 保留 desc get 苹果 拓展 factor
工厂方法模式,是对简单工厂模式的升级,将创建产品的工厂抽象出来,具体产品的创建延时到工厂子类去实现,让调用者决定来创建哪一个实例。工厂方法模式有以下角色:抽象产品接口,抽象工厂接口,具体产品,具体工厂。
类关系图如下:
抽象产品接口,定义产品的行为
/** * @Author zhouw * @Description 产品(手机)接口 * @Date 2020-01-17 */ public interface IPhone { void play(); }
具体产品,具体产品的实现,可以有多个
public class HuaweiPhone implements IPhone { @Override public void play() { System.out.println("我是华为手机"); } }
public class SumsungPhone implements IPhone { @Override public void play() { System.out.println("我是三星手机"); } }
抽象工厂接口,只有一个接口定义,就是生产产品(做手机)
/** * @Author zhouw * @Description 产品(手机)工厂接口 * @Date 2020-01-17 */ public interface IPhoneFactory { IPhone makePhone(); }
具体工厂,工厂接口的实现,生成对应的具体产品,一般都是和具体产品实现类一一对应的
/** * @Author zhouw * @Description 华为工厂制造华为手机 * @Date 2020-01-17 */ public class HuaweiFactory implements IPhoneFactory { @Override public IPhone makePhone() { return new HuaweiPhone(); } }
/** * @Author zhouw * @Description 三星工厂制造三星手机 * @Date 2020-01-17 */ public class SumsungFactory implements IPhoneFactory { @Override public IPhone makePhone() { return new SumsungPhone(); } }
最后就是应用了,想要华为手机就用华为手机工厂生产,想用三星手机就用三星手机工厂生产,自己选择对应工厂子类去创建产品对象,还可以随时添加一种产品,比如说苹果手机,就再加一个苹果手机的具体实现和苹果手机工厂的工厂子类。
public class Application { public static void main(String[] args) { // 制造华为手机 HuaweiFactory huaweiFactory = new HuaweiFactory(); IPhone phone1 = huaweiFactory.makePhone(); phone1.play(); // 制造三星手机 SumsungFactory sumsungFactory = new SumsungFactory(); IPhone phone2 = sumsungFactory.makePhone(); phone2.play(); } }
输出:
工厂方法模式是简单工厂模式的升级,保留了简单工厂模式获取对象的便利性外,还增加了拓展性,易用性,调用者不需要知道获取具体产品的参数(产品名,代码等),只管找对应的产品工厂要就行了,自己选择对应工厂子类去创建产品对象,还可以随时添加一种产品,比如说苹果手机,就再加一个苹果手机的具体实现和苹果手机工厂的工厂子类。
标签:return 制造 简单 保留 desc get 苹果 拓展 factor
原文地址:https://www.cnblogs.com/zhou-920644981/p/12217403.html