工厂模式简单工厂通常是一个用来创建其他对象的对象。工厂是构造方法的抽象,用来实现不用的分配方案。工厂对象通常包含一个或多个方法,用来创建这个工厂所能创建的各种类型的对象。这些方法可能接收参数,用来指定对象创建的方式,最后返回创建的对象。工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式代码举例//几个Button类classButton{/*...*/}classWinButtonextendsButton{/*...*/}classMacButtonextendsButton{/*...*/}//它们的工厂类interfaceButtonFactory{abstractButtoncreateButton();}classWinButtonFactoryimplementsButtonFactory{ButtoncreateButton(){returnnewWinButton();}}classMacButtonFactoryimplementsButtonFactory{ButtoncreateButton(){returnnewMacButton();}}代码案例:有一个BUTTON类表示按钮,另有它的两个子类WINBUTTON和MACBUTTON分别代表WINDOWS和MAC风格的按钮,那么这几个类和用于创建它们的工厂类在JAVA中可以如下实现(在此省略所有类和方法的可见性设置):简单工厂模式基本架构工厂(Creator)角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。抽象产品(Product)角色简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品(ConcreteProduct)角色是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。适用性下列情况可以考虑使用工厂方法模式:创建对象需要大量重复的代码。创建对象需要访问某些信息,而这些信息不应该包含在复合类中。创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为。当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。代码实现代码内容定义个人信息•packagetw.idv.javax.demo.Interface;••importjava.util.Calendar;••publicinterfacePersonInterface{••publicstaticfinalStringROLE=PersonInterface.class.getName();••publicabstractStringgetId()throwsException;••publicabstractvoidsetId(Stringid)throwsException;••publicabstractStringgetName()throwsException;••publicabstractvoidsetName(Stringname)throwsException;••publicabstractCalendargetBirthday()throwsException;••publicabstractvoidsetBirthday(Calendarbirthday)throwsException;•}•}对个人信息进行实现•packagetw.idv.javax.demo.Implements;•importjava.util.Calendar;•importtw.idv.javax.demo.Interface.PersonInterface;publicabstractclassPersonInterfaceImplimplementsPersonInterface{•privateStringid=null;•privateStringname=null;•privateCalendarbirthday=null;•publicStringgetId(){•returnid;}•publicvoidsetId(Stringid)•{this.id=id;}•publicStringgetName()•{returnname;}•publicvoidsetName(Stringname)•{this.name=name;}•publicCalendargetBirthday()•{returnbirthday;}•publicvoidsetBirthday(Calendarbirthday){this.birthday=birthday;}•}下一页代码内容继承PersonInterfaceImpl,写一个描述孩童基本资料Children•Packagetw.idv.javax.demo.Extends;•Importtw.idv.javax.demo.Implements.PersonInterfaceImpl;publicclassChildrenextendsPersonInterfaceImpl•{•}继承PersonInterfaceImpl,写一个描述儿童状况•packagetw.idv.javax.demo.Extends;•Importtw.idv.javax.demo.Implements.PersonInterfaceImpl;publicclassAdultextendsPersonInterfaceImpl{privateintincome=0;•publicintgetIncome()•{returnincome;}•publicvoidsetIncome(intincome){this.income=income;}•}适用情况一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。需要强调一系列相关的产品对象的设计以便进行联合使用时。提供一个产品类库,而只想显示它们的接口而不是实现时。