概述
承上:实战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 总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复