我是靠谱客的博主 时尚柚子,最近开发中收集的这篇文章主要介绍实战java设计模式(四)抽象工厂模式1 介绍2 例子3 例子升华4 总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

承上:实战java设计模式(三)工厂方法模式

这里写目录标题

  • 1 介绍
  • 2 例子
    • 2.1 手机接口
    • 2.2 实现手机类
    • 2.3 充电器接口
    • 2.4 充电器实现
    • 2.5 抽象工厂接口
    • 2.6 工厂实现
    • 2.7 测试主类
  • 3 例子升华
  • 4 总结
    • 4.1 核心角色
    • 4.2 核心结构

1 介绍

工厂方法模式的问题是每一个工厂只能生产一种产品。试想这样一个场景一个厂要生产螺丝的同时要配对生产螺丝冒,生产乒乓球的同时配对生产乒乓球盒,生产产品的时候同时配对生产产品包装。

2 例子

还是手机生产的例子,但是生产手机的同时需要生产配对的手机充电器。如果采用工厂方法模式就需要对每一个产品进行编写类和工厂类,而且还需要编写配对的逻辑,显然不是一种优雅的处理方式,于是抽象工厂模式就可以利用起来了。

2.1 手机接口

//手机接口
interface Phone {
//显示logo
void showLogo();
//当然手机还有其他方法……
}

2.2 实现手机类

假设有3种,苹果小米和华为。

//苹果手机类
class ApplePhone implements Phone {
//手机的其他属性和方法
@Override
public void showLogo() {
System.out.println("这是苹果手机的LOGO");
}
}
//小米手机
class XiaoMiPhone implements Phone {
@Override
public void showLogo() {
System.out.println("这是小米手机的LOGO");
}
}
//华为手机
class HuaweiPhone implements Phone {
@Override
public void showLogo() {
System.out.println("这是华为手机的LOGO");
}
}

2.3 充电器接口

//充电器接口
interface Charger {
//充电器的方法
void charging();
}

2.4 充电器实现

假设有两种充电器typeC和lightning的。

//typec充电器
class TypeCCharger implements Charger {
@Override
public void charging() {
System.out.println("type-c接口的充电器正在充电");
}
}
//Lightning接口的充电器
class LightningCharger implements Charger {
@Override
public void charging() {
System.out.println("Lightning接口的充电器正在充电");
}
}

2.5 抽象工厂接口

//定义一个抽象工厂
interface Factory {
//生产手机
Phone getPhone();
//生产充电器
Charger getCharger();
}

2.6 工厂实现

//苹果厂
class AppleFactory implements Factory {
@Override
public Phone getPhone() {
return new ApplePhone();
}
@Override
public Charger getCharger() {
return new LightningCharger();
}
}
//华为厂
class HuaweiFactory implements Factory {
@Override
public Phone getPhone() {
return new HuaweiPhone();
}
@Override
public Charger getCharger() {
return new TypeCCharger();
}
}
//小米厂
class XiaomiFactory implements Factory {
@Override
public Phone getPhone() {
return new XiaoMiPhone();
}
@Override
public Charger getCharger() {
return new TypeCCharger();
}
}

2.7 测试主类

public class Main {
public static void main(String[] args) {
//创建三个厂
Factory xiaomiFactory = new XiaomiFactory();
Factory huaweiFactory = new HuaweiFactory();
Factory appleFactory = new AppleFactory();
//生产对象
Phone xiaomiPhone = xiaomiFactory.getPhone();
Charger xiaomiCharger = xiaomiFactory.getCharger();
Phone applePhone = appleFactory.getPhone();
Charger appleCharger = appleFactory.getCharger();
Phone huaweiPhone = huaweiFactory.getPhone();
Charger huaweiCharger = huaweiFactory.getCharger();
//使用对象
xiaomiPhone.showLogo();
xiaomiCharger.charging();
System.out.println("---");
huaweiPhone.showLogo();
huaweiCharger.charging();
System.out.println("---");
applePhone.showLogo();
appleCharger.charging();
}
}

运行结果:

这是小米手机的LOGO
type-c接口的充电器正在充电
---
这是华为手机的LOGO
type-c接口的充电器正在充电
---
这是苹果手机的LOGO
Lightning接口的充电器正在充电

3 例子升华

两个产品的设计模式中规中矩按照抽象接口实现。关键就在于抽象工厂的接口的设计,设计了这种工厂需要生产哪些产品,实现工厂具体是实现需要生产的产品簇,注意从两个维度是去理解抽象工厂模式,一是工厂视角,而是产品视角。

4 总结

4.1 核心角色

  • 各个产品抽象:不仅有一个产品抽象;
  • 多个产品实现:每个产品抽象又有多个产品实现;
  • 抽象工厂:工厂需要哪些产品作为一个模板;
  • 工厂实现:每个工厂都会生产一簇产品(注意不是同样父类的一系列产品),是不同抽象类的。

4.2 核心结构

抽象工厂会生产一簇产品,比如:手机和充电器、螺丝和螺帽、杯子和杯盖等。

最后

以上就是时尚柚子为你收集整理的实战java设计模式(四)抽象工厂模式1 介绍2 例子3 例子升华4 总结的全部内容,希望文章能够帮你解决实战java设计模式(四)抽象工厂模式1 介绍2 例子3 例子升华4 总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(94)

评论列表共有 0 条评论

立即
投稿
返回
顶部