Factory_工厂模式
使用工厂模式的目的,是将选择实现类,创建对象统一管理和控制,从而将调用者和创建者解耦
场景需求
public interface Car { public void name(); } //Car车接口
现在有两种车:五菱宏光和特斯拉
//五菱宏光 public class Wuling implements Car{ public void name(){ System.out.println("五菱宏光"); } } //特斯拉 public class Tesla implements Car{ public void name(){ System.out.println("特斯拉"); } }
如果张三想要一辆五菱宏光,他只能自己徒手造车。
public class ZhangSan { public static void main(String[] args) { Car wuling = new Wuling(); wuling.name(); } }
但如果生产五菱宏光很麻烦,需要很多张三不知道的参数,所以他只能去买一辆,于是他来到了4S店...
简单工厂模式
首先了解一下简单工厂设计模式,又叫静态工厂模式,它不属于23种设计模式之一
那么4S店的老板会问你:小伙子~你想要买什么呀?是买五菱宏光呢,还是买特斯拉呀~
public class FourS_Factory { public static Car BuyCar(String carName){ if("五菱宏光".equals(carName)){ return new Wuling(); }else if ("特斯拉".equals(carName)){ return new Tesla(); }else{ System.out.println("抱歉!没货~"); return null; } } }
张三说:老板,给我来辆五菱宏光!,于是乎4S店的老板就卖给张三一辆五菱宏光。
public class ZhangSan { public static void main(String[] args) { Car wuling = FourS_Factory.BuyCar("五菱宏光"); wuling.name(); } }
这就是简单工厂,它并没有满足开闭原则,如果门店上新,工厂里的判断要增加,必然会修改原有代码。虽然某种程度上不符合设计原则,但实际使用最多!
工厂方法模式
工厂方法模式给每个实现类都定义了一个实现工厂接口的工厂类,完全实现了开闭原则
public interface CarFactory { Car create(); }
为了不被4S店中间商赚差价,张三直接找到了生产五菱宏光的工厂买车...
public class WulingFactory implements CarFactory { @Override public Car create() { return new Wuling(); } }
public class ZhangSan { public static void main(String[] args) { Car wuling = new WulingFactory().create(); wuling.name(); } }
工厂方法模式,虽然符合开闭原则,但代码量变多了。
抽象工厂模式
假设现在有华为和小米两个厂商,每个厂商又都生产手机和路由器两种商品,那么22得4,有4个具体的产品。
//手机接口 public interface Phone { public void call(); } //路由器接口 public interface Router { public void connect(); }
不管是哪个厂商,手机都应该实现手机接口重写呼叫方法call(),路由器都应该实现路由器接口重写连接方法connect()
public class HuaWeiPhone implements Phone { public void call() { System.out.println("华为手机呼叫中..."); } } public class HuaWeiRouter implements Router { public void connect() { System.out.println("华为路由器连接中..."); } }
那么现在有一个工厂接口,所有工厂都应该实现这个接口,每个具体的工厂都应该能创建手机和路由器。
public interface SuperFactory { Phone createPhone(); Router createRouter(); }
例如现在有一个华为工厂,那它生产的手机就是华为手机,生产的路由器就是华为的路由器
public class HuaWeiFactory implements SuperFactory { @Override public Phone createPhone() { return new HuaWeiPhone(); } @Override public Router createRouter() { return new HuaWeiRouter(); } }
那么张三现在想买一部华为手机,那么他就要去华为工厂就可以买到..
public class ZhangSan { public static void main(String[] args) { HuaWeiFactory huaWeiFactory = new HuaWeiFactory(); Phone phone = huaWeiFactory.createPhone(); phone.call(); } }
抽象工厂模式将一个系列相关的具体产品统一到一起创建,例如华为系列,小米系列...各个系列之间是分离的,所以在添加新的系列时不用动其他原有的代码,但是规定了每个系列中的产品集合,要扩展新的产品会很困难。
本文来自博客园,作者:独游空想家,转载请注明原文链接:https://www.cnblogs.com/linzhikai/p/16514468.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗