Posts /

工厂设计模式

11 Aug 2020

工厂设计模式


1. 简单工厂模式(静态工厂模式)

简单工厂模式:定义一个工厂类,在该类的统一静态方法中根据不同的参数实例化不同的对象。

UML图:

1597152170059

手机抽象类,抽象不同的产品

public interface AbstractPhone {
    void make();
}

手机实现类

public class HuaweiPhone implements AbstractPhone {
    public HuaweiPhone() {
        this.make();
    }

    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("制造华为手机");
    }
    
}
public class MiPhone implements AbstractPhone {

    public MiPhone() {
        this.make();
    }

    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("生产小米手机");
    }
    
}

简单工厂类

public class PhoneFactory {
    public static AbstractPhone getPhone(String phoneType) {
        if ("MiPhone".equals(phoneType)) {
            return new MiPhone();
        } else if ("HuaweiPhone".equals(phoneType)) {
            return new HuaweiPhone();
        }
        return null;
    }
}

测试类

public class FactoryPattern {

    public static void main(String[] args) {
        AbstractPhone miPhone = PhoneFactory.getPhone("MiPhone");
        AbstractPhone huaweiPhone = PhoneFactory.getPhone("HuaweiPhone");
    }

}
/**
生产小米手机
制造华为手机
*/

Cons&Pros

2. 工厂方法模式

工厂方法模式是对简单工厂模式的进一步解耦,因为在工厂模式中一个工厂子类对应一个产品子类。

1597325248862

工厂接口和产品接口

package javatest.pattern.factorymethod;

public interface AbstractFactory {
    public AbstractPhone createPhone();
}
package javatest.pattern.factorymethod;

public interface AbstractPhone {
    public void make();
}

具体工厂类

public class HuaweiFactory implements AbstractFactory{
    @Override
    public AbstractPhone createPhone() {
        // TODO Auto-generated method stub
        return new HuaweiPhone();
    }
}
public class MiFactory implements AbstractFactory {
    @Override
    public AbstractPhone createPhone() {
        // TODO Auto-generated method stub
        return new MiPhone();
    }
}

具体产品类

public class HuaweiPhone implements AbstractPhone {
    public HuaweiPhone() {
        this.make();
    }
    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("制造华为手机");
    }
}
public class MiPhone implements AbstractPhone {
    public MiPhone() {
        this.make();
    }
    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("生产小米手机");
    }
}

Cons&Pros

3. 抽象工厂模式