当前位置:文档之家› 工厂模式在java中的应用

工厂模式在java中的应用


//它们的工厂类 interface ButtonFactory{ abstract Button createButton(); } class WinButtonFactory implements ButtonFactory{ Button createButton(){ return new WinButton(); } } class MacButtonFactory implements ButtonFactory{ Button createButton(){ return new MacButton(); } }
简单工厂模式基本架构
工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可 以被外界直接调用,创建所需的产品对象。 抽象产品(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的 公共接口。 具体产品(Concrete Product)角色 是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个 具体类的实例。
• • • •
适用情况
一个系统要独立于它的产品的创建、组合和表示时。 一个系统要由多个产品系列中的一个来配置时。需要强调一系列相关的产品对象的设计以便 进行联合使用时。 提供一个产品类库,而只想显示它们的接口而不是实现时。
适用性
下列情况可以考虑使用工厂方法模式:

创建对象需要大量重复的代码。 创建对象需要访问某些信息,而这些信 息不应该包含在复合类中。 创建对象的生命周期必须集中管理,以 保证在整个程序中具有一致的行为。
当每个抽象产品都有多于一个的具 体子类的时候,工厂角色怎么知道实例 化哪一个子类呢?比如每个抽象产品角 色都有两个具体产品。抽象工厂模式提 供两个具体工厂角色,分别对应于这两 个具体产品角色,每一个具体工厂角色 只负责某一个产品角色的实例化。
代码举 例
//几个Button类 class Button{/* ...*/} class WinButton extends Button{/* ...*/} class MacButton extends Button{/* ...*/}
代码案例:有一个BUTTON类表示按钮,另有它的 两个子类WINBUTTON和MACBUTTON分别代表 WINDOWS和MAC风格的按钮,那么这几个类和用于 创建它们的工厂类在JAVA中可以如下实现(在此省 略所有类和方法的可见性设置):
工厂模式
简单工厂通常是一个用来创建其他对象的对象。工厂是构造方法 的抽象,用来实现不用的分配方案。 工厂对象通常包含一个或多个方法,用来创建这个工厂所能创建
的各种类型的对象。这些方法可能接收参数,用来指定对象创建
的方式,最后返回创建的对象。 工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简 单工厂模式是工厂模式家族中最简单实用的模式
}
• •
• • •

下一页
代码内容
继承 PersonInterfaceImpl ,写一 个描述孩童基本资料 Children
• • • • Package tw.idv.javax.demo.Extends; Import tw.idv.javax.demo.Implements.PersonInterfaceImpl; public class Children extends PersonInterfaceImpl { }
继承 PersonInterfaceImpl ,写一 个描述儿童状况
• • package tw.idv.javax.demo.Extends; Import tw.idv.javax.demo.Implements.PersonInterfaceImpl; public class Adult extends PersonInterfaceImpl { private int income = 0; public int getIncome() { return income; } public void setIncome(int income) { this.income = income; } }
import java.util.Calendar;
public interface PersonInterface { public static final String ROLE = PersonInterface.class.getName(); public abstract String getId() throws Exception; public abstract void setId(String id) throws Exception; public abstract String getName() throws Exception; public abstract void setName(String name) throws Exception; public abstract Calendar getBirthday() throws Exception; public abstract void setBirthday(Calendar birthday) throws Exception; }
代码实现
代码内容
定义个人信息
• • • • • • • • • • • • • • • package tw.idv.javax.demo.Interface;
对个人信息进行实现
• • • • • • • • • • • • • • • • • • package tw.idv.javax.demo.Implements; import java.util.Calendar; import tw.idv.javax.demo.Interface.PersonInterface; public abstract class PersonInterfaceImpl implements PersonInterface { private String id = null; private String name = null; private Calendar birthday = null; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { = name; } public Calendar getBirthday() { return birthday; } public void setBirthday(Calendar birthday) { this.birthday = birthday; } }
相关主题