工厂方法解析

针对简单工厂违背开闭原则,设计模式中引入了工厂方法模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行

UML图:
在这里插入图片描述

  • 通过抽象类的方式定义Phone,并定义抽象方法produce
  • 通过接口的方式定义PhoneFactory,并定义接口方法getPhone
  • 通过继承抽象类Phone定义ApplePhone,并覆盖重写抽象方法produce进行具体产品的生产
  • 通过实现接口PhoneFactory定义ApplePhoneFactory,并覆盖重写接口方法getPhone返回具体对象
  • 通过实现接口PhoneFactory定义HuaweiPhoneFactory,并覆盖重写接口方法getPhone返回具体对象
  • 定义测试类Test创建ApplePhoneFactory和HuaweiPhoneFactory进行测试

代码:

//Phone抽象类
public abstract class Phone {
    abstract  void produce();
}
//PhoneFactory接口
public interface PhoneFactory {
    Phone getPhone();
}
//通过继承抽象类定义ApplePhone
public class ApplePhone extends  Phone {
    @Override
    void produce() {
        System.out.println("生产苹果手机");
    }
}
//通过实现接口定义ApplePhoneFactory
public class ApplePhoneFactory implements PhoneFactory {
    @Override
    public Phone getPhone() {
        return new ApplePhone();
    }
}
//通过继承抽象类定义HuaweiPhone
public class HuaweiPhone extends Phone {
    @Override
    void produce() {
        System.out.println("生产华为手机");
    }
}
//通过实现接口定义HuaweiPhoneFactory
public class HuaweiPhoneFactory implements PhoneFactory {
    @Override
    public Phone getPhone() {
        return new HuaweiPhone();
    }
}
//Test测试类
public class Test {
    public static void main(String[] args) {
        PhoneFactory phoneFactory= new ApplePhoneFactory();
        phoneFactory.getPhone().produce();

        PhoneFactory phoneFactory1 = new HuaweiPhoneFactory();
        phoneFactory1.getPhone().produce();
    }
}

总结:

工厂方法模式是简单工厂模式的衍生,遵循设计模中的“开闭”原则。在工厂方法模中有一个抽象的Factory类(可以是抽象类也可以是接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品

你可能感兴趣的:(工厂方法解析)