核心作用:
实现了创建者和调用者的分离
--简单工厂
--工厂方法模式
--抽象工厂模式
简单工厂
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","高档发动机");
}
};
}
}
简单写下 基本上 这种模式用到的时候 项目就比较大了 但是那时 就不只单单一种设计模式了