设计模式-工厂方法模式

返回上一级目录:Java设计模式

工厂方法模式,是对简单工厂模式的升级,将创建产品的工厂抽象出来,具体产品的创建延时到工厂子类去实现,让调用者决定来创建哪一个实例。工厂方法模式有以下角色:抽象产品接口,抽象工厂接口,具体产品,具体工厂。

类关系图如下:

 抽象产品接口,定义产品的行为

/**
 * @Author zhouw
 * @Description 产品(手机)接口
 * @Date 2020-01-17
 */
public interface IPhone {

    void play();
}

具体产品,具体产品的实现,可以有多个

public class HuaweiPhone implements IPhone {

    @Override
    public void play() {
        System.out.println("我是华为手机");
    }
}
public class SumsungPhone implements IPhone {

    @Override
    public void play() {
        System.out.println("我是三星手机");
    }
}

抽象工厂接口,只有一个接口定义,就是生产产品(做手机)

/**
 * @Author zhouw
 * @Description 产品(手机)工厂接口
 * @Date 2020-01-17
 */
public interface IPhoneFactory {

    IPhone makePhone();

}

具体工厂,工厂接口的实现,生成对应的具体产品,一般都是和具体产品实现类一一对应的

/**
 * @Author zhouw
 * @Description 华为工厂制造华为手机
 * @Date 2020-01-17
 */
public class HuaweiFactory implements IPhoneFactory {

    @Override
    public IPhone makePhone() {
        return new HuaweiPhone();
    }
}
/**
 * @Author zhouw
 * @Description 三星工厂制造三星手机
 * @Date 2020-01-17
 */
public class SumsungFactory implements IPhoneFactory {

    @Override
    public IPhone makePhone() {
        return new SumsungPhone();
    }
}

最后就是应用了,想要华为手机就用华为手机工厂生产,想用三星手机就用三星手机工厂生产,自己选择对应工厂子类去创建产品对象,还可以随时添加一种产品,比如说苹果手机,就再加一个苹果手机的具体实现和苹果手机工厂的工厂子类。

public class Application {

    public static void main(String[] args) {
        // 制造华为手机
        HuaweiFactory huaweiFactory = new HuaweiFactory();
        IPhone phone1 = huaweiFactory.makePhone();
        phone1.play();

        // 制造三星手机
        SumsungFactory sumsungFactory = new SumsungFactory();
        IPhone phone2 = sumsungFactory.makePhone();
        phone2.play();
    }
}

输出:

总结

工厂方法模式是简单工厂模式的升级,保留了简单工厂模式获取对象的便利性外,还增加了拓展性,易用性,调用者不需要知道获取具体产品的参数(产品名,代码等),只管找对应的产品工厂要就行了,自己选择对应工厂子类去创建产品对象,还可以随时添加一种产品,比如说苹果手机,就再加一个苹果手机的具体实现和苹果手机工厂的工厂子类。

返回上一级目录:Java设计模式

原文地址:https://www.cnblogs.com/zhou-920644981/p/12217403.html