工厂方法
2020-09-22
定义 #
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使得一个类的实例化延迟。
理解 #
- 使用new违背了依赖倒置原则,导致程序间的紧耦合。
- 该模式隔离了对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合(new)会导致软件的脆弱。
- 通过面向对象的手法,将所要创建对象的工作延迟到了子类。从而实现了一种扩展的策略(而非更改),较好的解决了这种紧耦合的关系。
代码 #
//代表所有车
interface Car{
public void run();
}
//比亚迪
class Biyadi implements Car{
public void run(){
System.out.println("比亚迪run");
}
}
//奥迪
class Aodi implements Car{
public void run(){
System.out.println("奥迪run");
}
}
//工厂
interface CarFactory{
public void createCar();
}
//具体的实现
class BiyadiCarFactory implements CarFactory{
public void createCar(){
return new Biyadi();
}
}
class AodiCarFactory implements CarFactory{
public void createCar(){
return new Aodi();
}
}
场景 #
//使用工厂方法
public void travel(CarFactory carFactory){
//我开什么车去旅游全凭其他人给我什么车,假如公司有钱了,可能给我传递了更好的车
Car car=carFactory.createCar();
car.run();
}
/*虽然可能还是会有依赖,但是在本实现中依赖基本上已经消失了
其实依赖不可能完全消失,我们使用模式的时候可能只是将散落在程序各个部分的依赖都集中起来*/
//不使用工厂方法
public void travel(){
//我只能开比亚迪去旅游,不能被更改
Car car=new BiyadiCar();
car.run();
}