设计模式-工厂模式
工厂
UML图:
public interface ICar {
// 由于工厂模式仅关系对象的创建,为说明方便,无需定义方法
}
public class TopCar implements ICar {}
public class MidCar implements ICar {}
public class LowCar implements ICar {}
public abstract class AbstractFactory {
public abstract ICar create();
}
public class TopFactory extends AbstractFactory {
@Override
public ICar create() {
return new TopCar();
}
}
public class MidFactory extends AbstractFactory {
@Override
public ICar create() {
return new MidCar();
}
}
public class LowFactory extends AbstractFactory {
@Override
public ICar create() {
return new LowCar();
}
}
public class FactoryTest {
public static void main(String[] args) {
AbstractFactory obj = new TopFactory();
ICar car = obj.create();
}
}
代码分析:
1. 工厂模式功能编制步骤
- 定制抽象产品接口,如ICar。
- 定制具体产品子类,如类TopCar、MidCar、LowCar。
- 定制抽象工厂类(或接口),如AbstractFactory。其中有一个重要的create( )抽象方法。
- 定制具体工厂子类,如UpFactory、MidFactory、DnFactory。
2. 工厂与简单工厂模式的区别
- 工厂模式把简单工厂中具体的工厂类(如CarSimpleFactory)划分为两层:抽象工厂层(如AbstractFactory)+具体工厂子类层(如TopFactory等)。抽象工厂层的划分丰富了框架的内涵,符合从一般到特殊的语义特点。
- create( )方法参数的理解:在简单工厂中,create(String mark)是成员方法,表明在该方法中管理多个产品,根据mark的值产生并返回ICar对象;在工厂模式中,create( )是抽象方法,无参数,表明在具体的子类工厂中创建某个具体的产品。
- 工厂方法更易于软件的二次开发维护,主要特征是:当需求分析发生变化时,只需要增加、删除相应的类,而不是修改已有的类。例如,若又生产一种高档的小汽车,只需要增加SuperCar 及 SuperFactory 两个类:
若在简单工厂中,则必须修改CarSimpleFactory 工厂类中的create( )方法,增加选择分支。