首页 > 应用开发 > Java > 3分钟重温抽象工厂模式(电商高频使用)
来源:中原网 网址:http://www.cibkglfj.cn/a/www.cybdw.net/
在他们脚下的石头缝隙处,坚韧的“宫墙草”正在风中摇曳。最终,一杯酸梅汤与一杯葛根西瓜汤为1份的500份特供品出现在拉练终点,喝到汤的参训新生赞不绝口,争相向老师索要配方与制作方法。国家杰出青年基金上海女性获得者比例保持在15%至20%。
除了Mate60Pro+之外,华为还上线了一款全新的折叠屏手机MateX5,目前也是上线即秒空、售价未知的状态。近年来,我国积极推进绿色交通发展,成效显著。
其中,地形级实景三维建设主要是完成覆盖全省陆域、近海海域及主要岛屿的米分辨率实景三维数据建设,由省级层面负责完成。【领克08上市价格/权益】【资料图】作为领克汽车首款基于CMAEvo架构打造的全新产品,领克08创造了多项行业领先,首搭中国首款自研车规级7nm量产芯片、EM-P全球最强混动-无忧解决方案,以及行业领先的FlymeLink手车互联生态,更配备了百万豪车级哈曼卡顿23扬声器豪华音响、量产最大的92英寸无界AR-HUD两大科技配置,堪称新能源时代智能豪华SUV的首选。
报道说,中情局在社交媒体上发布了一段题为《为什么我要与中情局联系——为了我自己》的俄语视频,视频中一个看上去是俄罗斯官员的人在看起来像俄罗斯城市的雪地中行走。公司主导参与上述在研项目及核心技术的研发人员还包括张卓兵和姚盛两位核心技术人员。
重点推荐:黄润秋部长会见新加坡永续发展与环境部部长傅海燕 近年来,全省网信战线始终以“时时放心不下”的责任感,坚决维护全省网络安全环境。毕竟学生现在要进行头颅部分的手术缝补,这显然不是正常的体罚。
来源:mikechen的互联网架构
抽象工厂模式(Abstract Factory)是一个比较复杂的创建型模式。
抽象工厂模式的工厂是抽象的,产品是抽象的,而且有多个产品需要创建。
这个抽象工厂会对应到多个实际工厂,每个实际工厂负责创建多个实际产品。
上一期,我们介绍了简单工厂模式和工厂方法模式,还没看过的小伙伴,可以点击下面链接查看:
1. 简单工厂模式
2. 工厂方法模式
这一期,我们来介绍抽象工厂模式。
大家好,我是mikechen,本文是《深入浅出设计模式》的第 10 篇。刚结束的设计模式系列篇:七大设计原则(2万+字、40多张图解),大家反响还不错。
为方便学习,我已将全部内容更新到《深入浅出设计模式》PDF 了,该 PDF 目前有 2+万字,50+张图解,80多页,内容涵盖设计模式的 7 大原则、23 种设计模式。图文并茂非常详细,夯实基础、复习备面都用得上,需要的同学文末自取。
抽象工厂模式(AbstractFactory)是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式由抽象工厂、具体工厂、抽象产品、具体产品构成。
抽象工厂(AbstractFactory):声明了用来创建不同产品的方法。
具体工厂(ConcreteFactory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
抽象产品(AbstractProduct):为每种产品声明业务方法。
具体产品(Product):定义具体工厂生产的具体产品,并实现抽象产品中定义的业务方法。它同具体工厂之间是多对一的关系。
假设:
华为和小米生产的手机,分为两条产品线,一个是老人手机,一个是学生手机。
为了解决增加产品线的问题,我们用抽象工厂模式来实现。
首先,定义抽象产品类:
public abstract class Dumbphone { public abstract void start();}public abstract class Studentphone { public abstract void start();}
两个抽象产品类 Dumbphone 、 Studentphone ,分别用来定义两个产品线老人手机、学生手机,它们都定义了 start 方法,用来启动手机。
具体产品是华为、小米的老人手机和学生手机:
public class HuaWeiDumbphone extends Dumbphone {
public void start() {
System.out.println("华为老人手机启动");
}
}
public class XiaoMiDumbphone extends Dumbphone {
public void start() {
System.out.println("小米老人手机启动");
}
}
public class HuaWeiStudentphone extends Studentphone{
public void start() {
System.out.println("华为学生手机启动");
}
}
public class XiaoMiStudentphone extends Studentphone{
public void start() {
System.out.println("小米学生手机启动");
}
}
接着创建生产电脑的抽象工厂:
public abstract class PhoneFactory { public abstract Dumbphone createDumbphone(); public abstract Studentphone createStudentphone();}
上面定义了两个方法,分别用来生产老人手机和学生手机。
定义华为和小米工厂(具体工厂):
public class HuaWeiFactory extends PhoneFactory {
@Override
public Dumbphone createDumbphone() {
return new HuaWeiDumbphone();
}
@Override
public Studentphone createStudentphone() {
return new HuaWeiStudentphone();
}
}
public class XiaoMiFactory extends PhoneFactory {
@Override
public Dumbphone createDumbphone() {
return new XiaoMiDumbphone();
}
@Override
public Studentphone createStudentphone() {
return new XiaoMiStudentphone();
}
}
华为工厂和小米工厂用来生产老人手机和学生手机这两个不同产品线的手机。
最后编写客户端(客户端调用):
public class Client { public static void main(String[]args) { PhoneFactory HuaWeiFactory=new HuaWeiFactory(); HuaWeiFactory.createDumbphone().start(); HuaWeiFactory.createStudentphone().start(); PhoneFactory XiaoMiFactory=new XiaoMiFactory(); XiaoMiFactory.createDumbphone().start(); XiaoMiFactory.createStudentphone().start(); }}
分别用 HuaWeiFactory 和 XiaoMiFactory 来生产老人手机、学生手机,调用 start 方法启动它们。
运行结果:
华为老人手机启动华为学生手机启动小米老人手机启动小米学生手机启动
为了便于理解,我画了一张这个例子的 UML 类图。
优点:
抽象工厂模式具有工厂方法模式的优点,并且还可以在类的内部对产品族进行约束;
增加新的产品族时,不需要修改原有系统,非常方便,符合开闭原则;
具体类的创建实例过程与客户端分离,客户端通过工厂的抽象接口操纵实例,客户端并不知道具体的实现是谁。
缺点:
增加新的产品族时,需要修改抽象工厂和所有的具体工厂。
以下场景中,可以考虑使用抽象工厂模式:
一个系统不依赖于产品线实例如何被创建、组合和表达的细节;
系统中有多于一个的产品线,而每次只使用其中某一产品线;
一个产品线(或是一组没有任何关系的对象)拥有相同的约束。
需要注意的是,使用抽象工厂模式,一般要满足以下条件:
系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品;
系统一次只可能消费其中某一族产品,即同族的产品一起使用。
通过本文,我们了解并掌握了抽象工厂模式的概念、结构、原理、使用、优缺点等。
抽象工厂模式是工厂方法模式的升级版本,抽象工厂模式和工厂方法模式的构成一样,,但它的方法个数、抽象产品的个数不同。
相较工厂方法模式,抽象工厂模式要解决的问题更为复杂。工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。
以上,就是关于抽象工厂模式的全部介绍。
来自 “ ITPUB博客 ” ,链接:http://www.cibkglfj.cn/70024924/viewspace-2996089/,如需转载,请注明出处,否则将追究法律责任。