工厂模式在接口中定义了创建对象的方法,而将具体的创建对象的过程在子类中实现,用户只需通过接口创建需要的对象即可,不用关注对象的具体创建过程。同时,不同的子类可根据需求灵活实现创建对象的不同方法
工厂方法模式的主要角色如下。
- 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
- 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
- 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
- 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
抽象产品
public interface Phone { String brand(); }
具体产品
public class Iphone implements Phone{ @Override public String brand() { return "这个是苹果生产线"; } }public class Huawei implements Phone{ @Override public String brand() { return "这是华为手机生产线"; } }
抽象工厂
public interface PhoneFactory { Phone createPhone(String phoneName); }
具体工厂
public class Factory implements PhoneFactory { public Phone createPhone(String phoneName){ if("HUAWEI".equals(phoneName)){ return new Huawei(); } else if ("Apple".equals(phoneName)){ return new Iphone(); }else{ return null; } } }
public static void main(String[] args) { Factory factory =new Factory(); Phone huawei=factory.createPhone("HUAWEI"); Phone ipone=factory.createPhone("Apple"); System.out.println(huawei.brand()); System.out.println(ipone.brand()); }
结果: