一.工厂模式
二.分类
简单工厂模式 用来生产同一等级结构中的任意产品。(对于新增产品,需要修改已有代码。用的最多) 要点: 简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。 用来生产同一等级结构中的固定产品。(支持增加任意产品) 要点: 为了避免简单工厂模式的缺点,不完全满足OCP原则。 工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。 抽象工厂模式 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
三.要点:
理论上工厂方法模式更优,但实际上,我们一般都使用简单工厂模式。 \color{red}{理论上工厂方法模式更优,但实际上,我们一般都使用简单工厂模式。} 理论上工厂方法模式更优,但实际上,我们一般都使用简单工厂模式。
四.核心本质
实例化对象,用工厂方法代替new操作; 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
五.具体实现
public interface Car { void run ( ) ;
}
public class Audi implements Car { @Override public void run ( ) { System . out. println ( "奥迪在跑。。。" ) ; }
}
public class Byd implements Car { @Override public void run ( ) { System . out. println ( "比亚迪在跑。。。" ) ; }
}
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 ; } }
}
public static void main ( String [ ] args) { Car c1= CarFactory . createCar ( "奥迪" ) ; Car c2= CarFactory . createCar ( "比亚迪" ) ; c1. run ( ) ; c2. run ( ) ;
}
public class CarFactory { public static Car createAudi ( ) { return new Audi ( ) ; } public static Car createByd ( ) { return new Byd ( ) ; }
}
public static void main ( String [ ] args) { Car c1= CarFactory . createAudi ( ) ; Car c2= CarFactory . createByd ( ) ; c1. run ( ) ; c2. run ( ) ;
}
public interface Car { void run ( ) ;
}
public class Audi implements Car { @Override public void run ( ) { System . out. println ( "奥迪在跑。。。" ) ; }
}
public class Byd implements Car { @Override public void run ( ) { System . out. println ( "比亚迪在跑。。。" ) ; }
}
public interface CarFactory { Car CreateCar ( ) ;
}
public class BydFactory implements CarFactory { @Override public Car CreateCar ( ) { return new Byd ( ) ; }
}
public class AudiFactory implements CarFactory { @Override public Car CreateCar ( ) { return new Audi ( ) ; }
}
public static void main ( String [ ] args) { Car c= new AudiFactory ( ) . CreateCar ( ) ; c. run ( ) ;
}
public interface Seat { void massage ( ) ;
}
class LuxurySeat implements Seat { @Override public void massage ( ) { System . out. println ( "高端座椅可以按摩。。。。。" ) ; }
}
class LowySeat implements Seat { @Override public void massage ( ) { System . out. println ( "低端座椅不能按摩。。。。。" ) ; }
}
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 ( "磨损快。。。。。" ) ; }
}
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 LowyEngine implements Engine { @Override public void run ( ) { System . out. println ( "速度慢。。。。。。" ) ; } @Override public void start ( ) { System . out. println ( "启动慢,。。。。。。" ) ; }
}
public interface CarFactory { Engine createEngine ( ) ; Seat createSeat ( ) ; Tyre createTyre ( ) ;
}
public class LowCarFactory implements CarFactory { @Override public Engine createEngine ( ) { return new LowyEngine ( ) ; } @Override public Seat createSeat ( ) { return new LowySeat ( ) ; } @Override public Tyre createTyre ( ) { return new LowTyre ( ) ; }
}
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 ( ) ; }
}
public static void main ( String [ ] args) { CarFactory c = new LowCarFactory ( ) ; Engine e= c. createEngine ( ) ; e. run ( ) ; e. start ( ) ; CarFactory c1 = new LuxuryCarFactory ( ) ; Engine e1= c. createEngine ( ) ; e1. run ( ) ; e1. start ( ) ;
}