核心作用:
实现了创建者和调用者的分离
--简单工厂
--工厂方法模式
--抽象工厂模式
简单工厂
interface Car { void run(); }
public class AudiCar implements Car { @Override public void run() { Log.d("Car","audicar"); } }
public class BMWCar implements Car { @Override public void run() { Log.d("Car", "bmw car"); } }
public class CarFactory { public Car getCar(int type) { switch (type) { case 0: return new AudiCar(); case 1: return new BMWCar(); } return null; } }
我们获取car只需要通过CarFactory来获取 但是 如果我们有新的car添加需要修改CarFactory 事实上不是很能我们满足对扩展开放 对修改关闭的原则 但是工作中比较常用
工厂方法模式--简单工厂的升级
interface Car { void run(); } public class AudiCar implements Car { @Override public void run() { Log.d("Car","audicar"); } } public class BMWCar implements Car { @Override public void run() { Log.d("Car", "bmw car"); } }
public class AudiFactory { public Car getCar() { return new AudiCar(); } }
public class BMWFactory { public Car getCar() { return new BMWCar(); } }
我们只需要使用每个工厂类 获取对象即可 这样有新的Car添加 只需要添加对应Factory 但是这样会产生大量类
抽象工厂模式(比较复杂 不常用)
针对有多个接口子类的情况--产品族
就是针对不同情况构建不同的产品
interface IEngine { /** * 发动机性能 */ void property(); }
interface IOtherConfig { void congig(); }
interface ICardFactory { /** * 配置 */ IOtherConfig config(); /** * 发动机配置 * * @return */ IEngine createEngin(); }
public class SlapUpCarFactory implements ICardFactory{ @Override public IOtherConfig config() { return new IOtherConfig() { @Override public void congig() { Log.d("SlapUpCarFactory","高配内饰"); } }; } @Override public IEngine createEngin() { return new IEngine() { @Override public void property() { Log.d("SlapUpCarFactory","高档发动机"); } }; } }
简单写下 基本上 这种模式用到的时候 项目就比较大了 但是那时 就不只单单一种设计模式了