【源码分析设计模式 2】JDK中的抽象工厂模式,记一次字节跳动Java研发岗的面试经历
2021/12/14 14:17:01
本文主要是介绍【源码分析设计模式 2】JDK中的抽象工厂模式,记一次字节跳动Java研发岗的面试经历,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
实现了抽象产品角色所定义的接口,由具体工厂来创建,它 同具体工厂之间是多对一的关系。
三、优缺点
1、优点
-
可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类进行管理;
-
当增加一个新的产品族时不需要修改原代码,满足开闭原则。
2、缺点
当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。
四、《Head First 设计模式》读后感
1、抽象工厂模式提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
2、工厂方法模式运用的是继承,抽象工厂模式运用的是对象的组合。
五、JDK源码分析
package com.guor.jdk;
import java.util.Calendar;
public class Factory {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// 注意月份下标从0开始,所以取月份要+1
System.out.println(“年:” + cal.get(Calendar.YEAR));
System.out.println(“月:” + (cal.get(Calendar.MONTH) + 1));
System.out.println(“日:” + cal.get(Calendar.DAY_OF_MONTH));
System.out.println(“时:” + cal.get(Calendar.HOUR_OF_DAY));
System.out.println(“分:” + cal.get(Calendar.MINUTE));
System.out.println(“秒:” + cal.get(Calendar.SECOND));
}
}
六、代码实例
1、UML类图
2、代码架构
3、具体代码
(1)order包包
package com.guor.abstractFactory.order;
import com.guor.abstractFactory.pizza.Pizza;
//一个抽象工厂模式的抽象层(接口)
public interface AbsFactory {
//让下面的工厂子类来 具体实现
public Pizza createPizza(String orderType);
}
package com.guor.abstractFactory.order;
import com.guor.abstractFactory.pizza.BJCheesePizza;
import com.guor.abstractFactory.pizza.BJPepperPizza;
import com.guor.abstractFactory.pizza.Pizza;
//这是工厂子类
public class BJFactory implements AbsFactory {
@Override
public Pizza createPizza(String orderType) {
System.out.println(“使用的是抽象工厂模式”);
Pizza pizza = null;
if(orderType.equals(“cheese”)) {
pizza = new BJCheesePizza();
} else if (orderType.equals(“pepper”)){
pizza = new BJPepperPizza();
}
return pizza;
}
}
package com.guor.abstractFactory.order;
import com.guor.abstractFactory.pizza.LDCheesePizza;
import com.guor.abstractFactory.pizza.LDPepperPizza;
import com.guor.abstractFactory.pizza.Pizza;
public class LDFactory implements AbsFactory {
@Override
public Pizza createPizza(String orderType) {
System.out.println(“使用的是抽象工厂模式”);
Pizza pizza = null;
if (orderType.equals(“cheese”)) {
pizza = new LDCheesePizza();
} else if (orderType.equals(“pepper”)) {
pizza = new LDPepperPizza();
}
return pizza;
}
}
package com.guor.abstractFactory.order;
import com.guor.abstractFactory.pizza.Pizza;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class OrderPizza {
AbsFactory factory;
// 构造器
public OrderPizza(AbsFactory factory) {
setFactory(factory);
}
private void setFactory(AbsFactory factory) {
Pizza pizza = null;
String orderType = “”; // 用户输入
this.factory = factory;
do {
orderType = getType();
// factory 可能是北京的工厂子类,也可能是伦敦的工厂子类
pizza = factory.createPizza(orderType);
if (pizza != null) { // 订购ok
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
} else {
System.out.println(“订购失败”);
break;
}
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
} while (true);
}
// 写一个方法,可以获取客户希望订购的披萨种类
private String getType() {
try {
BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
System.out.println(“input pizza 种类:”);
String str = strin.readLine();
return str;
} catch (IOException e) {
e.printStackTrace();
return “”;
}
}
}
package com.guor.abstractFactory.order;
public class PizzaStore {
public static void main(String[] args) {
new OrderPizza(new BJFactory());
}
}
(2)pizza包包
package com.guor.abstractFactory.pizza;
public class BJCheesePizza extends Pizza {
@Override
public void prepare() {
setName(“北京的奶酪pizza”);
System.out.println(“北京的奶酪pizza 准备原材料”);
}
}
package com.guor.abstractFactory.pizza;
public class BJPepperPizza extends Pizza {
@Override
public void prepare() {
这篇关于【源码分析设计模式 2】JDK中的抽象工厂模式,记一次字节跳动Java研发岗的面试经历的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?
- 2024-12-23汽车4S店运营效率提升的核心工具