设计模式-简单工厂 --工厂模式--抽象模式
1 、简单工厂模式
package com.bjsxt.factory.simplefactory; public interface Car { void run(); }
package com.bjsxt.factory.simplefactory; public class Audi implements Car { @Override public void run() { System.out.println("奥迪再跑!"); } }
package com.bjsxt.factory.simplefactory; public class Byd implements Car { @Override public void run() { System.out.println("比亚迪再跑!"); } }
package com.bjsxt.factory.simplefactory; public class CarFactory { public static Car createCar(String type){ if("奥迪".equals(type)){ return new Audi(); }else if("比亚迪".equals(type)){ return new Byd(); }else{ return null; } } }
调用者:如何没有使用工厂模式
package com.bjsxt.factory.simplefactory; /** * 测试在没有工厂模式的情况下 * @author 尚学堂高淇 www.sxt.cn * */ public class Client01 { //调用者 public static void main(String[] args) { Car c1 = new Audi(); Car c2 = new Byd(); c1.run(); c2.run(); } }
如果使用简单工厂模式:
package com.bjsxt.factory.simplefactory; /** * 简单工厂情况下 * @author 尚学堂高淇 www.sxt.cn * */ public class Client02 { //调用者 public static void main(String[] args) { Car c1 =CarFactory.createCar("奥迪"); Car c2 = CarFactory.createCar("比亚迪"); c1.run(); c2.run(); } }
简单工厂的缺点:
下面我们来看工厂模式:
我们首先定义了工厂抽象类的接口:
package com.bjsxt.factory.factorymethod; public interface CarFactory { Car createCar(); }
package com.bjsxt.factory.factorymethod; public class AudiFactory implements CarFactory { @Override public Car createCar() { return new Audi(); } }
package com.bjsxt.factory.factorymethod; public class BenzFactory implements CarFactory { @Override public Car createCar() { return new Benz(); } }
package com.bjsxt.factory.factorymethod; public class BydFactory implements CarFactory { @Override public Car createCar() { return new Byd(); } }
package com.bjsxt.factory.factorymethod; public class Client { public static void main(String[] args) { Car c1 = new AudiFactory().createCar(); Car c2 = new BydFactory().createCar(); c1.run(); c2.run(); } }
抽象工厂模式:
比如一个汽车的一个产品族:包括汽车发动机、汽车座椅 汽车 轮胎
package com.bjsxt.factory.abstractFactory; public interface CarFactory { Engine createEngine(); Seat createSeat(); Tyre createTyre(); }
package com.bjsxt.factory.abstractFactory; public interface Engine { void run(); void start(); } class LuxuryEngine implements Engine{ @Override public void run() { System.out.println("转的快!"); } @Override public void start() { System.out.println("启动快!可以自动启停!"); } } class LowEngine implements Engine{ @Override public void run() { System.out.println("转的慢!"); } @Override public void start() { System.out.println("启动慢!"); } }
package com.bjsxt.factory.abstractFactory; public interface Seat { void massage(); } class LuxurySeat implements Seat { @Override public void massage() { System.out.println("可以自动按摩!"); } } class LowSeat implements Seat { @Override public void massage() { System.out.println("不能按摩!"); } }
package com.bjsxt.factory.abstractFactory; public interface Tyre { void revolve(); } class LuxuryTyre implements Tyre { @Override public void revolve() { System.out.println("旋转不磨损!"); } } class LowTyre implements Tyre { @Override public void revolve() { System.out.println("旋转磨损快!"); } }
package com.bjsxt.factory.abstractFactory; public class LowCarFactory implements CarFactory { @Override public Engine createEngine() { return new LowEngine(); } @Override public Seat createSeat() { return new LowSeat(); } @Override public Tyre createTyre() { return new LowTyre(); } }
package com.bjsxt.factory.abstractFactory; public class LuxuryCarFactory implements CarFactory { @Override public Engine createEngine() { return new LuxuryEngine(); } @Override public Seat createSeat() { return new LuxurySeat(); } @Override public Tyre createTyre() { return new LuxuryTyre(); } }
package com.bjsxt.factory.abstractFactory; public class Client { public static void main(String[] args) { CarFactory factory = new LuxuryCarFactory(); Engine e = factory.createEngine(); e.run(); e.start(); } }
一个高端的汽车由高端发动机、高端座椅、高端轮胎构成
分类:
设计模式
posted on 2017-07-30 20:16 luzhouxiaoshuai 阅读(141) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!