设计模式—工厂方法模式
1.什么是工厂方法模式
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。核心工厂类不在负责产品的创建,而是充当一个抽象工厂的角色,仅负责定义具体工厂子类必须实现的接口。
2.角色分析
- 抽象工厂:提供创建产品的接口;
- 具体工厂:实现抽象工厂中的接口方法,完成具体产品的创建;
- 抽象产品:提供产品主要特征接口;
- 具体产品:实现抽象产品中提供的特征接口,由具体工厂来创建,它和具体工厂之间一一对应。
3.举例实现
以下通过手机品牌的例子加以说明,代码如下:
①抽象工厂
//抽象工厂
public interface IPhoneFactory {
//获取具体产品方法
IPhoneFactory getPhone();
}
②抽象产品
//抽象产品
public interface IPhone {
//获取手机名字
String getPhoneName();
//获取手机价格
double getPhonePrice();
}
③具体产品
//具体产品—小米
public class XiaoMiPhone implements IPhone{
@Override
public String getPhoneName() {
return "小米";
}
@Override
public double getPhonePrice() {
return 6666.98;
}
}
// ------------------------------------------
//具体产品—华为手机
public class HuaWeiPhone implements IPhone{
@Override
public String getPhoneName() {
return "华为";
}
@Override
public double getPhonePrice() {
return 8888.98;
}
}
④具体工厂
//具体工厂—小米工厂
public class XiaomiFactory implements IPhoneFactory{
@Override
public IPhone getPhone() {
return new XiaoMiPhone();
}
}
//-----------------------------------
public class HuaWeiFactory implements IPhoneFactory{
@Override
public IPhone getPhone() {
return new HuaWeiPhone();
}
}
⑤测试类
//测试类
public class Test {
public static void main(String[] args) {
IPhoneFactory xiaomiFactory = new XiaomiFactory();
IPhoneFactory huaWeiFactory = new HuaWeiFactory();
IPhone xiaoMi = xiaomiFactory.getPhone();
System.out.println("我将要购买" + xiaoMi.getPhoneName() + "手机,需要支付" + xiaoMi.getPhonePrice() + "元");
}
}
运行结果:
④总结
工厂方法模式一个具体工厂对应生产一种具体产品,具体工厂与具体产品为一对一的关系。