美文网首页
抽象工厂模式

抽象工厂模式

作者: nieniemin | 来源:发表于2020-06-22 22:45 被阅读0次

什么是抽象工厂方法模式

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

上一节的工厂方法模式中考虑的是一类产品的生产,如鱼塘里面只养鱼,Shape下面只有圆形、正方形等。在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调。

模式角色

1.抽象工厂(AbstractFactory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
2.具体工厂(HuaWeiFactory,AppleFactory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
3.抽象产品(Phone,Laptop):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
4.具体产品(HuaWeiPhone,HuaWeiLaptop,IPhone,MacLaptop):实现了抽象产品角色所定义的接口,由具体工厂来创建,它 同具体工厂之间是多对一的关系。

UML类图

抽象工厂模式

代码实现

public abstract class AbstractFactory {

    /**
     * 删除笔记本电脑
     * @return
     */
    public abstract Laptop produceLaptop();

    /**
     * 生成手机
     * @return
     */
    public abstract Phone producePhone();
}
public class AppleFactory extends AbstractFactory {

    @Override
    public Laptop produceLaptop() {
        return new MacLaptop();
    }

    @Override
    public Phone producePhone() {
        return new IPhone();
    }
}
public class HuaWeiFactory extends AbstractFactory {
    @Override
    public Laptop produceLaptop() {
        return new HuaWeiLaptop();
    }

    @Override
    public Phone producePhone() {
        return new HuaWeiPhone();
    }
}
public abstract class Phone {

    public abstract void phoneName();
}
public abstract class Laptop {

    public abstract void laptopName();
}
public class HuaWeiPhone extends Phone {
    @Override
    public void phoneName() {
        System.out.println("华为手机产品");
    }
}
public class IPhone extends Phone {

    @Override
    public void phoneName() {

        System.out.println("苹果手机产品");
    }
}
public class HuaWeiLaptop extends Laptop {
    @Override
    public void laptopName() {
        System.out.println("华为笔记本产品");
    }
}
public class MacLaptop extends Laptop {
    @Override
    public void laptopName() {
        System.out.println("苹果笔记本产品");
    }
}
public class TestAbstractFactory {

    public static void main(String[] args) {
        AbstractFactory appleFactory = new AppleFactory();
        AbstractFactory huaWeiFactory = new HuaWeiFactory();

        Phone applePhone = appleFactory.producePhone();
        applePhone.phoneName(); // 苹果手机产品
        Laptop appleLaptop = appleFactory.produceLaptop();
        appleLaptop.laptopName(); // 苹果笔记本产品

        Phone huaWeiPhone = huaWeiFactory.producePhone();
        huaWeiPhone.phoneName(); // 华为手机产品
        Laptop huaWeiLaptop = huaWeiFactory.produceLaptop();
        huaWeiLaptop.laptopName(); // 华为笔记本产品

    }
}

优点
它让具体的创建实例过和客户端分离,不关心创建细节;将一系列的产品族对象统一在一起创建。当增加一个新的产品族时不需要修改原代码,满足开闭原则。
缺点
产品族扩展非常困难,要增加一个系列的某一产品,所有的工厂类都需要进行修改。

抽象工厂模式完整代码

相关文章

网友评论

      本文标题:抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/pfcmtktx.html