抽象工厂模式案例如何深入解析?

2026-05-29 14:433阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计783个文字,预计阅读时间需要4分钟。

抽象工厂模式案例如何深入解析?

类图解析:通过抽象类的方式建立抽象产品类Phone,并声明抽象方法producePhone。同样,通过抽象类的方式建立抽象产品类NoteBook,并声明抽象方法produceNoteBook。通过接口的方式建立抽象工厂类Facto,用于建立具体产品类。

抽象工厂模式案例如何深入解析?


类图解析:

  • 通过抽象类的方式建立抽象产品类Phone,并声明抽象方法producePhone
  • 通过抽象类的方式建立抽象产品类NoteBook,并声明抽象方法produceNoteBook
  • 通过接口的方式建立抽象工厂Factory,并声明接口方法getPhone,getNoteBook
  • 通过实现抽象工厂接口创建具体工厂类AppleFactory,该类中可生产具体的产品ApplePhone及AppleMackBook:通过继承抽象类Phone实现具体产品ApplePhone,并覆盖重写producePhone方法,通过继承抽象类NoteBook实现具体产品AppleMackBook,并覆盖重写produceNoteBook方法
  • 通过实现抽象工厂接口创建具体工厂类HuaweiFactory,该类中可生产具体的产品HuaweiPhone及HuaWeiMackBook:通过继承抽象类Phone实现具体产品HuaweiPhone,并覆盖重写producePhone方法,通过继承抽象类NoteBook实现具体产品HuaweiNoteBook,并覆盖重写produceNoteBook方法
  • 通过Test测试类进行测试:通过Factory接口生成appleFactory对象与huaweiFactory对象,调用对象中的producePhone与produceNoteBook方法,返回实际结果
  • 代码如下:

    //Phone抽象类,可以用接口方式代替
    public abstract class Phone {
    abstract void producePhone();
    }
    //NoteBook抽象类,可以用接口方式代替
    public abstract class NoteBook {
    abstract void produceNoteBook();
    }
    //抽象工厂
    public interface Factory {
    Phone getPhone();
    NoteBook getNoteBook();
    }
    //Apple Phone类
    public class ApplePhone extends Phone {
    @Override
    void producePhone() {
    System.out.println("生产苹果手机");
    }
    }
    //Apple MacBook类
    public class AppleMacBook extends NoteBook {
    @Override
    void produceNoteBook() {
    System.out.println("生产苹果MacBook");

    }
    }
    //Apple工厂类
    public class AppleFactory implements Factory {
    @Override
    public Phone getPhone() {
    return new ApplePhone();
    }

    @Override
    public NoteBook getNoteBook() {
    return new AppleMacBook();
    }
    }
    //Huawei Phone类
    public class HuaweiPhone extends Phone {
    @Override
    void producePhone() {
    System.out.println("生产华为手机");
    }
    }
    //Huawei NoteBook类
    public class HuaweiNoteBook extends NoteBook {
    @Override
    void produceNoteBook() {
    System.out.println("生产华为笔记本电脑");
    }
    }
    //Huawei工厂类
    public class HuaweiFactory implements Factory {
    @Override
    public Phone getPhone() {
    return new HuaweiPhone();
    }

    @Override
    public NoteBook getNoteBook() {
    return new HuaweiNoteBook();
    }
    }
    //测试类
    public class Test {
    public static void main(String[] args) {
    Factory appleFactory = new AppleFactory();
    appleFactory.getPhone().producePhone();
    appleFactory.getNoteBook().produceNoteBook();

    Factory huaweiFactory = new HuaweiFactory();
    huaweiFactory.getPhone().producePhone();
    huaweiFactory.getNoteBook().produceNoteBook();
    }
    }

    总结:

  • 抽象方法是对工厂方法的进一步拓展,抽象工厂可以支持产品系列或支持多种业务
  • 抽象工厂实现起来很麻烦,如果有工厂的产品系列又多了一种产品的功能,那么很多地方都要重写。
  • 抽象工厂好处就在于,当AppleFactory这种类型的工厂停用启用新的工厂NewAppleFactory的时候,可以很方便的在应用代码里用同系列的new NewAppleFactory()替换掉就可以了,其他的什么都不需要改。

  • 本文共计783个文字,预计阅读时间需要4分钟。

    抽象工厂模式案例如何深入解析?

    类图解析:通过抽象类的方式建立抽象产品类Phone,并声明抽象方法producePhone。同样,通过抽象类的方式建立抽象产品类NoteBook,并声明抽象方法produceNoteBook。通过接口的方式建立抽象工厂类Facto,用于建立具体产品类。

    抽象工厂模式案例如何深入解析?


    类图解析:

  • 通过抽象类的方式建立抽象产品类Phone,并声明抽象方法producePhone
  • 通过抽象类的方式建立抽象产品类NoteBook,并声明抽象方法produceNoteBook
  • 通过接口的方式建立抽象工厂Factory,并声明接口方法getPhone,getNoteBook
  • 通过实现抽象工厂接口创建具体工厂类AppleFactory,该类中可生产具体的产品ApplePhone及AppleMackBook:通过继承抽象类Phone实现具体产品ApplePhone,并覆盖重写producePhone方法,通过继承抽象类NoteBook实现具体产品AppleMackBook,并覆盖重写produceNoteBook方法
  • 通过实现抽象工厂接口创建具体工厂类HuaweiFactory,该类中可生产具体的产品HuaweiPhone及HuaWeiMackBook:通过继承抽象类Phone实现具体产品HuaweiPhone,并覆盖重写producePhone方法,通过继承抽象类NoteBook实现具体产品HuaweiNoteBook,并覆盖重写produceNoteBook方法
  • 通过Test测试类进行测试:通过Factory接口生成appleFactory对象与huaweiFactory对象,调用对象中的producePhone与produceNoteBook方法,返回实际结果
  • 代码如下:

    //Phone抽象类,可以用接口方式代替
    public abstract class Phone {
    abstract void producePhone();
    }
    //NoteBook抽象类,可以用接口方式代替
    public abstract class NoteBook {
    abstract void produceNoteBook();
    }
    //抽象工厂
    public interface Factory {
    Phone getPhone();
    NoteBook getNoteBook();
    }
    //Apple Phone类
    public class ApplePhone extends Phone {
    @Override
    void producePhone() {
    System.out.println("生产苹果手机");
    }
    }
    //Apple MacBook类
    public class AppleMacBook extends NoteBook {
    @Override
    void produceNoteBook() {
    System.out.println("生产苹果MacBook");

    }
    }
    //Apple工厂类
    public class AppleFactory implements Factory {
    @Override
    public Phone getPhone() {
    return new ApplePhone();
    }

    @Override
    public NoteBook getNoteBook() {
    return new AppleMacBook();
    }
    }
    //Huawei Phone类
    public class HuaweiPhone extends Phone {
    @Override
    void producePhone() {
    System.out.println("生产华为手机");
    }
    }
    //Huawei NoteBook类
    public class HuaweiNoteBook extends NoteBook {
    @Override
    void produceNoteBook() {
    System.out.println("生产华为笔记本电脑");
    }
    }
    //Huawei工厂类
    public class HuaweiFactory implements Factory {
    @Override
    public Phone getPhone() {
    return new HuaweiPhone();
    }

    @Override
    public NoteBook getNoteBook() {
    return new HuaweiNoteBook();
    }
    }
    //测试类
    public class Test {
    public static void main(String[] args) {
    Factory appleFactory = new AppleFactory();
    appleFactory.getPhone().producePhone();
    appleFactory.getNoteBook().produceNoteBook();

    Factory huaweiFactory = new HuaweiFactory();
    huaweiFactory.getPhone().producePhone();
    huaweiFactory.getNoteBook().produceNoteBook();
    }
    }

    总结:

  • 抽象方法是对工厂方法的进一步拓展,抽象工厂可以支持产品系列或支持多种业务
  • 抽象工厂实现起来很麻烦,如果有工厂的产品系列又多了一种产品的功能,那么很多地方都要重写。
  • 抽象工厂好处就在于,当AppleFactory这种类型的工厂停用启用新的工厂NewAppleFactory的时候,可以很方便的在应用代码里用同系列的new NewAppleFactory()替换掉就可以了,其他的什么都不需要改。