当前位置:网站首页>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();
}
}
边栏推荐
- 消息队列-消息事务管理对比
- Combined mode, transparent mode and secure mode
- 工作积累——Web请求中使用ThreadLocal遇见的问题
- SSH keygen specifies the path
- Logstash - logstash pushes data to redis
- PyTorch混合精度原理及如何开启该方法
- volatile应用场景
- Vs2022 offline installation package download and activation
- University Information Management System
- Implement the runnable interface
猜你喜欢
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)
Prometheus和Zabbix的对比
EFK昇級到ClickHouse的日志存儲實戰
Kolla ansible deploy openstack Yoga version
Kolla ansible deploy openstack Yoga version
kolla-ansible部署openstack yoga版本
423- binary tree (110. balanced binary tree, 257. all paths of binary tree, 100. same tree, 404. sum of left leaves)
Selective Search for Object Recognition 论文笔记【图片目标分割】
Record how to modify the control across threads
Younger sister Juan takes you to learn JDBC -- two days' Sprint Day2
随机推荐
05. basic data type - Dict
Logstash -- send an alert message to the nail using the throttle filter
Library management system
tf.nn.top_k()
numpy.random.choice
MySQL-06
Implement the runnable interface
numpy. log
去哪儿网BI平台建设演进史
The difference between overload method and override method
低代码实时数仓构建系统的设计与实践
"= =" difference from "equals"
Redis底层数据结构
工作积累——Web请求中使用ThreadLocal遇见的问题
tf. nn. top_ k()
ES6的搭配环境
Class and object learning
Kolla ansible deploy openstack Yoga version
Household accounting procedures (First Edition)
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