设计模式——工厂模式
工厂模式
简单工厂
//产品接口
public interface Car {
void name();
}
//产品实现类——BYD
public class BYD implements Car{
@Override
public void name() {
System.out.println("比亚迪");
}
}
//产品实现类——Tesla
public class Tesla implements Car{
@Override
public void name() {
System.out.println("特斯拉");
}
}
//产品工厂
public class CarFactory {
public static Car getCar(String s) {
if("比亚迪".equals(s)) {
return new BYD();
}else if("特斯拉".equals(s)) {
return new Tesla();
}else {
return null;
}
}
}
//消费者
public class Consumer {
public static void main(String[] args) {
// //获得对象的传统方法
// Car car1 = new BYD();
// Car car2 = new Tesla();
//
// car1.name();
// car2.name();
//简单工厂
Car car1 = CarFactory.getCar("比亚迪");
Car car2 = CarFactory.getCar("特斯拉");
car1.name();//比亚迪
car2.name();//特斯拉
}
}
工厂方法
//产品接口
public interface Car {
void name();
}
//产品实现类——BYD
public class BYD implements Car{
@Override
public void name() {
System.out.println("比亚迪");
}
}
//产品实现类——Tesla
public class Tesla implements Car{
@Override
public void name() {
System.out.println("特斯拉");
}
}
//------------------------------以下代表与简单工厂不一样的地方----------------------------
//产品工厂接口
public interface CarFactory {
Car getCar();
}
//产品工厂实现类——BYDFactory
public class BYDFactory implements CarFactory{
@Override
public Car getCar() {
return new BYD();
}
}
//产品工厂实现类——TeslaFactory
public class TeslaFactory implements CarFactory{
@Override
public Car getCar() {
return new Tesla();
}
}
//消费者——Consumer
public class Consumer {
public static void main(String[] args) {
Car car1 = new BYDFactory().getCar();
Car car2 = new TeslaFactory().getCar();
car1.name();//比亚迪
car2.name();//特斯拉
}
}
//------------------------------------------------------------------------------------
简单工厂与工厂方法的区别:
前者是一个工厂生产多个产品,我们需要获得哪个产品,就去统一的工厂求购即可;优势是代码量简洁,但不易横向扩展产品数量(需要改动工厂内部代码逻辑)
后者是多个工厂生产各自产品,我们需要获得哪个产品,就去相应的工厂求购即可。优势是利于横向扩展产品数量,但代码量繁杂。
根据设计原则,我们开发出了工厂方法模式,但是一般根据实际业务,还是简单工厂更贴合应用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端