设计模式-工厂
来源:互联网 发布:java工程师刚入职 编辑:程序博客网 时间:2024/06/01 14:10
通用类:
public interface Car { void run();}public class Benz implements Car { @Override public void run() { System.out.println("Benz is Running"); }}public class Audi implements Car { @Override public void run() { System.out.println("Audi is Running"); }}
1.简单工厂(不符合ocp原则 开闭原则)
/** * @author Administrator * 简单汽车工厂 */public class CarFactory { public static Car createCar(String type){ if("audi".equals(type)){ return new Audi(); }else if ("benz".equals(type)) { return new Benz(); }else { return null; } }}public class CarFactor02 { public static Car createAudi(){ return new Audi(); } public static Car createBenz(){ return new Benz(); }}//客户端调用public class Client { public static void main(String[] args) { Car audi=CarFactory.createCar("audi"); Car benz=CarFactory.createCar("benz"); audi.run(); benz.run(); Car audi02=CarFactor02.createAudi(); Car benz02=CarFactor02.createBenz(); audi02.run(); benz02.run(); }}
2.工厂方法模式(符合ocp原则,拓展较复杂):在不修改已有类的前提下,通过增加新的工厂类实现拓展
//工厂接口public interface CarFactory { Car createCar();}//具体工厂public class AudiFactory implements CarFactory { @Override public Car createCar() { return new Audi(); }}public class BenzFactory implements CarFactory { @Override public Car createCar() { return new Benz(); }}//客户端调用代码public class Client { public static void main(String[] args) { Car audi=new AudiFactory().createCar(); Car benz=new BenzFactory().createCar(); audi.run(); benz.run(); }}
总结:根据设计理论建议使用工厂方法模式,但实际开发使用简单工厂模式
3.抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的单个产品无能为力,支持增加新的产品族)
//组件1public 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("启动慢"); }}//组件2public 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("无按摩"); }}//组件3public interface Tyre { void resolve();}class LuxuryTyre implements Tyre{ @Override public void resolve() { System.out.println("磨损慢"); }}class LowTyre implements Tyre{ @Override public void resolve() { System.out.println("磨损快"); }}//工厂public interface CarFactory { Engine createEngine(); Tyre createTyre(); Seat createSeat();}class LuxuryFactory implements CarFactory{ @Override public Engine createEngine() { return new LuxuryEngine(); } @Override public Tyre createTyre() { return new LuxuryTyre(); } @Override public Seat createSeat() { return new LuxurySeat(); }}class LowFactory implements CarFactory{ @Override public Engine createEngine() { return new LowEngine(); } @Override public Tyre createTyre() { return new LowTyre(); } @Override public Seat createSeat() { return new LowSeat(); }}
应用场景:
-JDK中的Calendar中的getInstance方法
-JDBC中的Connection对象的获取
-Hibernate中SessionFactory创建session
-spring中容器创建管理Bean对象
-XML解析时的DocumentBuilderFactory创建解析对象
-反射中Class对象的newInstance方法
0 0
- 设计模式--工厂设计
- 设计模式------工厂模式
- 设计模式------工厂模式
- 设计模式 [ 工厂模式 ]
- 设计模式--工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 工厂模式
- 设计模式-工厂模式
- 设计模式 -- 工厂模式
- 设计模式-工厂模式
- 设计模式----工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- log4j.properties配置文件详解
- rocketmq问题汇总-一个consumerGroup只对应一个topic
- rocketmq3.26研究之三NameServer
- Protobuf Lesson 2: Data Model for Multiple Message Types
- c++基础——类的大小
- 设计模式-工厂
- 序列化和反序列化
- qemu cracks when shutdown vm
- Eclipse快捷键1
- 安装 XAMPP中FileZilla和Tomcat无法启动的解决办法
- iOS字符串处理详解
- HA 高可用集群
- iOS开发笔记-圆滑的曲线
- rocketmq3.26研究之Failover下producer的表现