当前位置:网站首页>GoF23—抽象工厂模式
GoF23—抽象工厂模式
2022-06-26 06:03:00 【酷小亚】
这篇我们来讲讲抽象工厂模式!
上篇文章(点击查看):GoF23—工厂模式
回顾(三种模式) :
简单工厂模式(Simple Factory)
用来生产统一等级结构中的任意产品(对于增加新的产品,需要修改原有的代码,代码量虽少,维护性较差!)
虽然某种程度上不符合设计原则,但实际上使用最多!
工厂方法模式(Factory Method)
用来生产同一等级结构中的固定产品(支持增加任意产品,代码量虽大,但维护性较好!)
横向扩展,不影响操作!
抽象工厂模式(Abstract Factory)
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
不可以增加产品,可以增加产品族,扩展新的产品非常困难!
抽象工厂模式:

package factory.abstract1;
//手机产品接口
public interface PhoneProduct {
void start();
void music();
void code();
void shutdown();
}
package factory.abstract1;
//路由器产品接口
public interface RouterProduct {
void start();
void openWife();
void watchTv();
void shutdown();
}
package factory.abstract1;
//抽象产品工厂
public interface ProductFactory {
//生产手机
PhoneProduct phoneProduct();
//生产路由器
RouterProduct routerProduct();
}
package factory.abstract1;
//小米手机
public class XiaoMiPhone implements PhoneProduct{
@Override
public void start() {
System.out.println("开启小米手机");
}
@Override
public void music() {
System.out.println("用小米手机听音乐");
}
@Override
public void code() {
System.out.println("用小米手机敲代码");
}
@Override
public void shutdown() {
System.out.println("关闭小米手机");
}
}
package factory.abstract1;
//华为手机
public class HuaWeiPhone implements PhoneProduct{
@Override
public void start() {
System.out.println("开启华为手机");
}
@Override
public void music() {
System.out.println("使用华为手机听音乐");
}
@Override
public void code() {
System.out.println("使用华为手机敲代码");
}
@Override
public void shutdown() {
System.out.println("关闭华为手机");
}
}
package factory.abstract1;
//小米路由器
public class XiaoMiRouter implements RouterProduct{
@Override
public void start() {
System.out.println("开启小米路由器");
}
@Override
public void openWife() {
System.out.println("使用小米路由器打开wife");
}
@Override
public void watchTv() {
System.out.println("使用小米路由器看电视");
}
@Override
public void shutdown() {
System.out.println("关闭小米路由器");
}
}
package factory.abstract1;
//华为路由器
public class HuaWeiRouter implements RouterProduct{
@Override
public void start() {
System.out.println("开启华为路由器");
}
@Override
public void openWife() {
System.out.println("使用华为路由器打开Wife");
}
@Override
public void watchTv() {
System.out.println("使用华为路由器看电视");
}
@Override
public void shutdown() {
System.out.println("关闭华为路由器");
}
}
package factory.abstract1;
//小米工厂
public class XiaoMiFactory implements ProductFactory{
@Override
public PhoneProduct phoneProduct() {
return new XiaoMiPhone();
}
@Override
public RouterProduct routerProduct() {
return new XiaoMiRouter();
}
@Override
public Laptop laptop() {
return new XiaoMiLaptop();
}
}
package factory.abstract1;
//华为工厂
public class HuaWeiFactory implements ProductFactory{
@Override
public PhoneProduct phoneProduct() {
return new HuaWeiPhone();
}
@Override
public RouterProduct routerProduct() {
return new HuaWeiRouter();
}
@Override
public Laptop laptop() {
return new HuaWeiLaptop();
}
}
package factory.abstract1;
//客户端
public class Client {
public static void main(String[] args) {
System.out.println("------------------小米系列产品------------------");
//小米工厂
XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
PhoneProduct phoneProduct = xiaoMiFactory.phoneProduct();
phoneProduct.music();
phoneProduct.code();
XiaoMiRouter xiaoMiRouter = new XiaoMiRouter();
xiaoMiRouter.openWife();
xiaoMiRouter.watchTv();
System.out.println("------------------华为系列产品------------------");
HuaWeiFactory huaWeiFactory = new HuaWeiFactory();
//华为工厂里面的手机产品
PhoneProduct product = huaWeiFactory.phoneProduct();
product.code();
product.music();
//华为工厂里面的路由器产品
RouterProduct routerProduct = huaWeiFactory.routerProduct();
routerProduct.openWife();
routerProduct.watchTv();
}
}

边栏推荐
- Mysql-10 (key)
- Five solutions across domains
- Logstash - logstash sends an alarm email to email
- Kolla ansible deploy openstack Yoga version
- A tragedy triggered by "yyyy MM DD" and vigilance before New Year's Day~
- Pytorch (environment, tensorboard, transforms, torchvision, dataloader)
- kolla-ansible部署openstack yoga版本
- numpy. tile()
- 实时数仓方案如何选型和构建
- SQL server functions
猜你喜欢

Detailed explanation of serial port communication principle 232, 422, 485
Explore small program audio and video calls and interactive live broadcast from New Oriental live broadcast

Tortoise and rabbit race example

421- binary tree (226. reversed binary tree, 101. symmetric binary tree, 104. maximum depth of binary tree, 222. number of nodes of complete binary tree)

类和对象的学习

Kolla ansible deploy openstack Yoga version

C generic speed

On site commissioning - final method of kb4474419 for win7 x64 installation and vs2017 flash back

跨域的五种解决方案

Playing RTSP streaming video on Web pages (webrtc)
随机推荐
302. minimum rectangular BFS with all black pixels
消息队列-消息事务管理对比
SQL Server view
numpy. random. choice
The interviewer with ByteDance threw me an interview question and said that if I could answer it, other companies would have an 80% chance of passing the technical level
技术能力的思考和总结
Factory method pattern, abstract factory pattern
Household accounting procedures (First Edition)
事务与消息语义
Kolla ansible deploy openstack Yoga version
Easy to understand from the IDE, and then talk about the applet IDE
Solve the problem that Cmdr cannot use find command under win10
Status mode, body can change at will
423-二叉树(110. 平衡二叉树、257. 二叉树的所有路径、100. 相同的树、404. 左叶子之和)
volatile应用场景
Mongodb——使用Mongodb对字段中字符串内容进行截取,并进行分组统计
MySQL-06
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
MySQL-09
从新东方直播来探究下小程序音视频通话及互动直播