工厂方法模式-java

239 阅读1分钟

工厂方法模式

手机案例:我们通过工厂获取不同品牌的手机(苹果)(华为),这里不同品牌的手机是同一级产品,品牌不同可是它们都是手机,不同品牌的手机对应一个工厂,通过工厂获取手机

简单工厂角色如下:

  1. 抽象产品:描述具体产品的共同特征(特征就是属性或者行为),这里的抽象产品是手机
  2. 具体产品:实现抽象产品(例如苹果手机、华为手机等...)
  3. 抽象工厂: 提供创建(生产)手机的方法
  4. 具体工厂: 实现抽象工厂

工厂方法模式在进行扩展时不需要去修改原有的代码,满足开闭原则、也会是程序松耦合

抽象产品代码

// 抽象产品:手机
public interface Phone {
    // 手机开机
    void start();
}

具体产品代码

/**
 * 具体产品:苹果手机
 */
public class Iphone implements Phone{
    @Override
    public void start() {
        System.out.println("苹果手机开机!");
    }
}
/**
 * 具体产品:华为手机
 */
public class HWPhone implements Phone{
    @Override
    public void start() {
        System.out.println("华为手机开机!");
    }
}

抽象工厂代码

/**
 * 抽象工厂:抽象手机工厂
 */
public interface PhoneFactory {

    // 创建手机
    Phone CreatePhone() ;
}

具体工厂代码

/**
 * 苹果手机工厂
 */
public class IphoneFactory implements PhoneFactory{
    @Override
    public Phone CreatePhone() {
        return new Iphone();
    }
}
/**
 * 华为手机工厂
 */
public class HWPhoneFactory implements PhoneFactory{

    @Override
    public Phone CreatePhone() {
        return new HWPhone();
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        // 创建苹果手机工厂对象
        PhoneFactory factory = new IphoneFactory();
        
        // 使用工厂对象创建出苹果手机
        Phone phone = factory.CreatePhone();

        // 将手机开机
        phone.start();
    }
}

运行结果

001.png