package com.lz.factory.simpleFactory; /* * * 补充:面向对象基本原则 * OCP:(开闭原则)添加新功能不应该修改原有代码,而是添加新的类 * DIP:(依赖倒转原则)依赖接口编程 * LOD:(迪米特法则)降低耦合,只和必要的对象通信 * 静态工厂类 { * 创建者和调用者的分离 * * 简单工厂问题:添加新功能需要修改代码 * } * 工厂方法类{ * 代码过多 * } * 两者比较 * 简单工厂结构代码更简单 * 工厂方法更难维护 * 总结:工厂方法模式符合理论要求但是实际使用时更多选择简单工厂模式 * */ public class SimpleFactory { public static Car createCar(String msg) { if ( msg.equals("jeep")) { return new Jeep(); } else if ( msg.equals("bmw")) { return new Bmw(); } else { return null; } } }
package com.lz.factory.simpleFactory; /* * 汽车接口 */ public interface Car { public void run(); }
package com.lz.factory.simpleFactory; public class Bmw implements Car{ @Override public void run() { System.out.println("I am BWM"); } }
package com.lz.factory.simpleFactory; public class Jeep implements Car{ @Override public void run() { System.out.println("I am Jeep"); } }
package com.lz.factory.simpleFactory; public class Test01 { public static void main(String[] args) { Car bmw = new Bmw(); Car jeep = new Jeep(); bmw.run(); jeep.run(); Car bmw1 = SimpleFactory.createCar("bmw"); Car jeep1 = SimpleFactory.createCar("jeep"); bmw1.run(); jeep1.run(); } }
工厂方法类:
每一个类添加一个工厂方法
package com.lz.factory.factoryMethod; /* * 定义接口 * 添加功能时只需要添加新的类 * 缺点代码太多没有简单工厂类简单 */ public interface CarFactory { Car createCar(); }
时间: 2024-09-29 01:35:46