JAVA设计模式 - 抽象工厂(Abstract Factory)

抽象工厂(Abstract Factory)

前面我们说了工厂模式,抽象工厂相较于工厂模式,突出了“家族”的概念。在针对每个产品族都提供一个接口,可以创建一个产品族里的多个对象。

我又举个栗子,假设随着手机市场的逐步壮大,苹果的客户有部分流向华为,小米等品牌。为了留住客户,高层决定以后售出的每台手机都送对应型号的手机透明壳。这里苹果13和13的透明手机壳就是一个对象家族,他们之间是配套的。

这时候,工厂模式就派不上用场了,毕竟只能创建一个对象。一个对象家族对应一个工厂(这个工厂可以创建多个对象,例如iphone13,iphone13的手机壳)

产品类:

public abstract class Apple {
    
    
}
public abstract class IphoneCase {
    
    
}
public class Iphone12 extends Apple {
    
    
}
public class Iphone11 extends Apple {
    
    
}
public class Iphone12Case extends IphoneCase {
    
    
}
public class Iphone11Case extends IphoneCase {
    
    
}

家族工厂类:

public abstract class AbstractFactory {
    
    
    abstract Apple createPhoneProduct();
    abstract IphoneCase createCaseProduct();
}
public class Series12Factory extends AbstractFactory {
    
    
    Apple createPhoneProduct() {
    
    
        return new Iphone12();
    }

    IphoneCase createCaseProduct() {
    
    
        return new Iphone12Case();
    }
}
public class Series11Factory extends AbstractFactory {
    
    
    Apple createPhoneProduct() {
    
    
        return new Iphone11();
    }

    IphoneCase createCaseProduct() {
    
    
        return new Iphone11Case();
    }
}

客户类:

public class Customer {
    
    
    public static void main(String[] args) {
    
    
        //这里创建12系列的产品
        AbstractFactory abstractFactory = new Series12Factory();
        Apple iphone = abstractFactory.createPhoneProduct();
        IphoneCase iphoneCase = abstractFactory.createCaseProduct();
        // do something with productA and productB
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43957211/article/details/110662631