抽象工厂模式,加工出不可思议的产品!

50 篇文章 0 订阅
44 篇文章 0 订阅

大家好,我是洪爵,今天又是设计模式的一天!

​ 之前我们有谈论过工厂模式,那么抽象工厂模式又是什么呢?其实可以简单的概括:工厂模式,是工厂加工出对应的产品;而抽象工厂模式是专门生产工厂的,每个工厂又可以制造自己的产品(有点俄罗斯套娃)。

​ 抽象工厂模式是属于创建型的模式,创建型模式即提供一种最佳的创建对象方式。

​ 抽象工厂模式其实和工厂模式有点类似,我把文章都贴出来了。大家可以对照着看下,我理解大家理解了工厂模式,那么抽象工厂模式其实就是一个模子刻出来的东西。

类图:
在这里插入图片描述
我们创建出一个AbstractFactory类,做抽象工厂,每一个工厂都需要去实现这个抽象工厂类,生产这个共产的是FactoryProducer类,根据你的需求返回对应的工厂,每个工厂能生产自己的产品族,这些产品族又是具体实现某一个interface。

上代码:

// AbstractFactory.java
public abstract class AbstractFactory {
    public abstract Computer getComputer(String computer);
    public abstract Phone getPhone(String phone);
}

// ComputerFactory.java
public class ComputerFactory extends AbstractFactory {
    public Computer getComputer(String computer) {
        if(null == computer) {
            return null;
        }

        if("LENOVE".equalsIgnoreCase(computer)) {
            return new LENOVE();
        } else if("ASUS".equalsIgnoreCase(computer)) {
            return new ASUS();
        }

        return null;
    }

    public Phone getPhone(String phone) {
        return null;
    }
}

// PhoneFactory.java
public class PhoneFactory extends AbstractFactory {
    public Computer getComputer(String computer) {
        return null;
    }

    public Phone getPhone(String phone) {
        if(null == phone) {
            return null;
        }

        if("HUAWEI".equalsIgnoreCase(phone)) {
            return new HUAWEI();
        } else if("ZTE".equalsIgnoreCase(phone)) {
            return new ZTE();
        }

        return null;
    }
}

// FactoryProducer.java
public class FactoryProducer {
    public static AbstractFactory getFactory(String factory) {
        if("PHONE".equalsIgnoreCase(factory)) {
            return new PhoneFactory();
        } else if("COMPUTER".equalsIgnoreCase(factory)) {
            return new ComputerFactory();
        }
        return null;
    }
}

// Phone.java
public interface Phone {
    void printPhoneName();
}

//ZTE.java
public class ZTE implements Phone {
    public void printPhoneName() {
        System.out.println("中兴手机");
    }
}

// HUAWEI.java
public class HUAWEI implements Phone {
    public void printPhoneName() {
        System.out.println("华为手机");
    }
}

// Computer.java
public interface Computer {
    void printComputerName();
}

// ASUS.java
public class ASUS implements Computer {
    public void printComputerName() {
        System.out.println("华硕电脑");
    }
}

// LENOVE.java
public class LENOVE implements Computer {
    public void printComputerName() {
        System.out.println("联想电脑");
    }
}

//Client.java
public class Client {
    public static void main(String[] args) {
        // 获取手机工厂
        AbstractFactory phoneFactory = FactoryProducer.getFactory("PHONE");

        // 手机工厂生产对应品牌手机
        Phone huawei = phoneFactory.getPhone("HUAWEI");
        huawei.printPhoneName();
        Phone zte = phoneFactory.getPhone("ZTE");
        zte.printPhoneName();

        // 获取电脑工厂
        AbstractFactory computerFactory = FactoryProducer.getFactory("COMPUTER");

        // 电脑工厂生产对应品牌电脑
        Computer lenove = computerFactory.getComputer("LENOVE");
        lenove.printComputerName();
        Computer asus = computerFactory.getComputer("ASUS");
        asus.printComputerName();
    }
}
/*
华为手机
中兴手机
联想电脑
华硕电脑
*/

本章节有关于抽象工厂模式的内容就到这里啦!希望对你有帮助哦~

在这里插入图片描述

愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。

道阻且长,往事作序,来日为章。

期待我们下一次相遇!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KnightHONG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值