设计模式——工厂方法模式

来源:互联网 发布:盟拓软件 编辑:程序博客网 时间:2024/06/06 06:52

工厂方法模式,类创造模式的一种,一种实例化对象(生产产品)的方法,用来从一组实现特定逻辑的类中实现某个对象。

先定义一个用于实现基本功能的超类或者接口,并以此拓展出一组具体的产品类(要实例化的类)。之后创建一个产生产品的工厂类,这个类包含一个工厂方法 ,这个方法根据接受的参数类型个数决定要实现的是哪个子类。该方法使用超类的类型作为返回类型。

那么什么时候才用工厂模式呢,或者说怎么用?

什么时候:

当需要创建一个类,而在编程时还不能确定这个类的类型时;

当一个类希望通过其子类来指定所创建对象的类型时;

当我们想要定位被创建的类,并获取相关的信息时。

怎么用:

创建一个基本的接口;

子类(产品类)继承接口,实现对应的基本功能方法;

创建一个工厂类,类中创建一个工厂方法,该方法可以根据参数决定要实例化的是哪个产品类;

创建一个Demo类,实例化具体的产品类


一个简单的例子:

先创建一个接口:

/** * 定义一个简单的接口,里面包括一个简单的方法 * @author luzi * */public interface Pet {public String petSound();}

两个不同的子类:

/** * 继承Pet接口,实现接口的方法 * @author luzi * */public class Cat implements Pet {@Overridepublic String petSound() {// TODO Auto-generated method stubSystem.out.println("miao...");return "miao...miao";}}


/** * 继承Pet接口,实现接口的方法 * @author luzi * */public class Dog implements Pet {@Overridepublic String petSound() {// TODO Auto-generated method stubSystem.out.println("Bow..");return "Bow...Bow";}}


工厂类:

/** * 创建一个工厂类,实现对象创建的逻辑:根据参数决定要创建的对象 * @author luzi * */public class PetFactory {Pet pet = null;public Pet getPet(String petType){if(petType.equals("Bow"))pet = new Dog();elseif(petType.equals("miao"))pet = new Cat();return pet;}}

简单的具体实现:

/** * 简单的Demo * @author luzi * */public class PetDemo {public static void main(String args[]){PetFactory fac = new PetFactory();//实例化一个工厂类Pet cat = fac.getPet("miao");//调用工厂类的getPet 方法,根据参数动态生成对象Pet dog = fac.getPet("Bow");cat.petSound();dog.petSound();}}

输出:










原创粉丝点击