一、基本概念
1、在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。
2、角色
A:抽象工厂(Factory)角色:担任这个角色的是工厂方法模式的核心,是具体工厂的抽象。
B、具体工厂(ConcreteFactory)角色:担任这个角色的是实现了抽象工厂接口的具体类,用来创建产品。
C、抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
D、具体产品(ConcreteProduct)角色:这个角色实现了抽象产品角色所声明的接口。
E、客户端类(Client):测试使用。
二、简单例子
A:抽象工厂(Factory)
1 package comm.pattern.create.factoryMethod; 2 3 /** 4 * 5 * @Title: PhoneFactory.java 6 * @Package: comm.pattern.create.factoryMethod 7 * @Description: 产品工厂 8 * @author yangzhancheng 9 * @2020年3月26日:下午4:50:47 10 * 11 */ 12 public interface PhoneFactory { 13 14 //创建手机 15 IPhone createPhone(); 16 }
B、具体工厂(ConcreteFactory)
B-1:
1 package comm.pattern.create.factoryMethod; 2 3 /** 4 * 5 * @Title: AppleFactory.java 6 * @Package: comm.pattern.create.factoryMethod 7 * @Description: 华为手机工厂 8 * @author yangzhancheng 9 * @2020年3月26日:下午5:16:59 10 * 11 */ 12 public class HuaweiFactory implements PhoneFactory{ 13 14 @Override 15 public IPhone createPhone() { 16 return new HuweiPhone(); 17 } 18 19 }
B-2:
1 package comm.pattern.create.factoryMethod; 2 3 /** 4 * 5 * @Title: AppleFactory.java 6 * @Package: comm.pattern.create.factoryMethod 7 * @Description: 苹果手机工厂 8 * @author yangzhancheng 9 * @2020年3月26日:下午5:16:59 10 * 11 */ 12 public class AppleFactory implements PhoneFactory{ 13 14 @Override 15 public IPhone createPhone() { 16 return new ApplePhone(); 17 } 18 19 }
C、抽象产品(Product)
1 package comm.pattern.create.factoryMethod; 2 3 /** 4 * 5 * @Title: IPhone.java 6 * @Package: comm.pattern.create.factoryMethod 7 * @Description: 手机产品 8 * @author yangzhancheng 9 * @2020年3月26日:下午4:44:51 10 * 11 */ 12 public interface IPhone { 13 14 //外观展示 15 void display(); 16 }
D、具体产品(ConcreteProduct)
D-1:
1 package comm.pattern.create.factoryMethod; 2 3 /** 4 * 5 * @Title: IPhone.java 6 * @Package: comm.pattern.create.factoryMethod 7 * @Description: 手机产品 8 * @author yangzhancheng 9 * @2020年3月26日:下午4:44:51 10 * 11 */ 12 public class ApplePhone implements IPhone{ 13 14 //外观展示 15 public void display(){ 16 System.out.println("苹果手机....."); 17 } 18 }
D-2:
1 package comm.pattern.create.factoryMethod; 2 3 /** 4 * 5 * @Title: IPhone.java 6 * @Package: comm.pattern.create.factoryMethod 7 * @Description: 手机产品 8 * @author yangzhancheng 9 * @2020年3月26日:下午4:44:51 10 * 11 */ 12 public class HuweiPhone implements IPhone { 13 14 //外观展示 15 public void display(){ 16 System.out.println("华为手机....."); 17 } 18 }
E、客户端类(Client)
1 package comm.pattern.create.factoryMethod; 2 3 import java.util.HashMap; 4 5 /** 6 * 7 * @Title: Client.java 8 * @Package: comm.pattern.create.prototype 9 * @Description: 描述该文件做什么 10 * @author yangzhancheng 11 * @2020年3月25日:下午10:34:05 12 * 13 */ 14 public class Client { 15 16 public static void main(String[] args) throws Exception{ 17 18 //教科书要求这么写 19 PhoneFactory huaweiFactory = (PhoneFactory) Class.forName("comm.pattern.create.factoryMethod.HuaweiFactory").newInstance(); 20 PhoneFactory appleFactory = (PhoneFactory) Class.forName("comm.pattern.create.factoryMethod.AppleFactory").newInstance(); 21 22 //也可以这么写 23 //PhoneFactory huaweiFactory = new HuaweiFactory(); 24 //PhoneFactory appleFactory = new AppleFactory(); 25 26 27 IPhone huaweiPhone = huaweiFactory.createPhone(); 28 IPhone applePhone = appleFactory.createPhone(); 29 30 huaweiPhone.display(); 31 applePhone.display(); 32 } 33 34 }
允许结果
华为手机.....
苹果手机.....
三、总结
后续补充。