设计模式-工厂模式

工厂

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( )方法,增加选择分支。

原文地址:https://www.cnblogs.com/yhc-love-cl/p/14231595.html