您的位置:首页 > 其它

【设计模式】工厂模式

2013-04-10 20:46 155 查看
class Main
{
public static void main(String[] args)
{
//简单工厂测试
/*
Weapon weapon = WeaponFactory.createWeapon("m4a1");
weapon.useWeapon();
*/
//工厂方法(多态工厂)测试
/*
WeaponFactory wf = new AK47Factory();
Weapon weapon = wf.createWeapon();
weapon.useWeapon();
*/
//抽象工厂测试
VirtualFactory vf = new DefaultFactory();
Weapon weapon = vf.createWeapon();
Car car = vf.createCar();
weapon.useWeapon();
car.drive();
}
}
/*
//*************************************************************************
//1.简单工厂(Simple Factory):
interface Weapon
{
public void useWeapon();
}
class AK47 implements Weapon
{
public void useWeapon()
{
System.out.println("the weapon is AK47");
}
}
class M4A1 implements Weapon
{
public void useWeapon()
{
System.out.println("the weapon is M4A1");
}
}
class WeaponFactory
{
public static Weapon createWeapon(String weaponName)
{
if(weaponName.equalsIgnoreCase("M4A1"))
return new M4A1();
else if(weaponName.equalsIgnoreCase("AK47"))
return new AK47();
else
throw new RuntimeException("no that weapon!");
}
}
*/
/*
//************************************************************************
//2.多态工厂(Factory Method)
interface Weapon
{
public void useWeapon();
}
class AK47 implements Weapon
{
public void useWeapon()
{
System.out.println("the weapon is AK47");
}
}
class M4A1 implements Weapon
{
public void useWeapon()
{
System.out.println("the weapon is M4A1");
}
}
interface WeaponFactory
{
public Weapon createWeapon();
}
// abstract class WeaponFactory
// {
// public abstract createWeapon();
// }
class M4A1Factory implements WeaponFactory
{
public Weapon createWeapon()
{
return new M4A1();
}
}
class AK47Factory implements WeaponFactory
{
public Weapon createWeapon()
{
return new AK47();
}
}
*/
//******************************************************
//3.抽象工厂(abstract factory)
interface Weapon
{
public void useWeapon();
}
interface Car
{
public void drive();
}
class Benz implements Car
{
public void drive()
{
System.out.println("this is benz");
}
}
class Baoma implements Car
{
public void drive()
{
System.out.println("this is baoma");
}
}
class AK47 implements Weapon
{
public void useWeapon()
{
System.out.println("the weapon is AK47");
}
}
class M4A1 implements Weapon
{
public void useWeapon()
{
System.out.println("the weapon is M4A1");
}
}
interface VirtualFactory
{
public Weapon createWeapon();
public Car createCar();
}
class DefaultFactory implements VirtualFactory
{
//这是一个产品族
public Weapon createWeapon()
{
return new M4A1();
}
public Car createCar()
{
return new Benz();
}
}

工厂模式共分为三种,简单工厂(simple factory),工厂方法(多态工厂,factory method),抽象工厂(abstract factory)。

这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用工厂模式的两种情况: 1.在编码时不能预见需要创建哪种类的实例。 2.系统不应依赖于产品类实例如何被创建、组合和表达的细节

总结:
(1)简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。

(2)工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。

(3)抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。

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