您的位置:首页 > 其它

工厂方法模式(Factory Method Pattern)

2013-03-09 06:31 141 查看
Define an interface for creating an object ,but let subclasss decide which class to instance .

Factory Method lets a class defer instantiation subclasses.

定义一个用于创建对象的接口,让子类决定去实例化那个类。,工厂模式就是通过定义的规范,去实例化子类。

在工厂模式中涉及到四个角色:

抽象工厂:是工厂模式方法的核心,与应用无关,,只要是工厂方法模式,就要实现这个接口。

package com.FactoryPattern;

public interface Creator

{

public <T extends Product> T factory(Class <T> c);

}

具体工厂:这个角色实现了抽象工厂接口。含有与应用密切相关的逻辑,受到应用程序的调用以创建产品对象。

package com.FactoryPattern;

public class ConcreteCreator implements Creator

{

public <T extends Product > T factory (Class<T> c)

{

Product product = null;

try

{

product = (Product) Class.forName(c.getName()).newInstance();

}

catch (Exception e)

{

// TODO: handle exception

}

return (T) product;

}

}

抽象产品:该角色定义产品的共性,实现对产品的抽象定义。

package com.FactoryPattern;

public interface Product

{

public void method1();

public void method2();

}

具体产品:该角色实现抽象产品所声明的接口,工厂方法模式所创建的每一个对象都是具体产品角色的实例。

package com.FactoryPattern;

public class ConcreteProduct implements Product

{

public void method1()

{

}

public void method2()

{

}

}

工厂方法模式的应用:

package com.FactoryPattern;

public interface FruitGardener

{

public Fruit factory();

}

package com.FactoryPattern;

public interface Fruit

{

public void plant();

public void grow();

public void harvest();

}

package com.FactoryPattern;

public class AppleGardener implements FruitGardener

{

public Fruit factory()

{

return new Apple();

}

}

package com.FactoryPattern;

public class GrapeGardener implements FruitGardener

{

public Fruit factory()

{

return new Grape();

}

}

package com.FactoryPattern;

public class Apple implements Fruit

{

private int treeAge;

public int getTreeAge()

{

return treeAge;

}

public void setTreeAge()

{

this.treeAge = treeAge;

}

public void plant()

{

System.out.println("苹果已经种植");

}

public void grow()

{

System.out.println("苹果正在生长");

}

public void harvest()

{

System.out.println("收获苹果");

}

}

package com.FactoryPattern;

public class Grape implements Fruit

{

private boolean seedless;

public boolean isSeedless()

{

return seedless;

}

public void setSeedless(boolean seedless)

{

this.seedless = seedless;

}

public void plant()

{

System.out.println("葡萄已经种植");

}

public void grow()

{

System.out.println("葡萄已经生长");

}

public void harvest()

{

System.out.println("已经收获");

}

}

package com.FactoryPattern;

public class ClientDemo

{

/**

* @param args

*/

public static void main(String[] args)

{

// TODO Auto-generated method stub

FruitGardener fruitGardener = new AppleGardener();

Fruit apple = fruitGardener.factory();

apple.plant();

apple.grow();

apple.harvest();

fruitGardener = new GrapeGardener();

Fruit grape = fruitGardener.factory();

grape.plant();

grape.grow();

grape.harvest();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: