Simple Factory:
以Fruit为例,以下是实现代码:
Fruit.java
package com.flyingh.iproduct;
public interface Fruit {
}
Apple.java
package com.flyingh.product;
import com.flyingh.iproduct.Fruit;
public class Apple implements Fruit {
}
Orange.java
package com.flyingh.product;
import com.flyingh.iproduct.Fruit;
public class Orange implements Fruit {
}
Pear.java
package com.flyingh.product;
import com.flyingh.iproduct.Fruit;
public class Pear implements Fruit {
}
FruitFactory.java
package com.flyingh.factory;
import com.flyingh.iproduct.Fruit;
import com.flyingh.product.Apple;
import com.flyingh.product.Orange;
import com.flyingh.product.Pear;
public class FruitFactory {
// public static Fruit getFruitInstance() {
// return new Apple();
// }
public static Fruit getFruitInstance(String str) {
if ("apple".equalsIgnoreCase(str)) {
return new Apple();
} else if ("orange".equalsIgnoreCase(str)) {
return new Orange();
} else if ("pear".equalsIgnoreCase(str)) {
return new Pear();
} else {
throw new RuntimeException("参数有误");
}
}
}
Client.java
package com.flyingh.client;
import com.flyingh.factory.FruitFactory;
import com.flyingh.iproduct.Fruit;
import com.flyingh.product.Apple;
import com.flyingh.product.Orange;
public class Client {
public static void main(String[] args) {
Fruit fruit = FruitFactory.getFruitInstance("orange");
System.out.println(fruit instanceof Orange);// true
System.out.println(fruit instanceof Apple);// false
fruit = FruitFactory.getFruitInstance("banana");
// java.lang.RuntimeException:参数有误
}
}
Factory Method:
以Cpu为例,代码如下:
CPU.java
package com.flyingh.icpu;
public interface CPU {
String info();
}
AMD.java
package com.flyingh.cpu;
import com.flyingh.icpu.CPU;
public class AMD implements CPU {
@Override
public String info() {
// TODO Auto-generated method stub
return "AMD";
}
}
Intel.java
package com.flyingh.cpu;
import com.flyingh.icpu.CPU;
public class Intel implements CPU {
@Override
public String info() {
// TODO Auto-generated method stub
return "Intel";
}
}
Factory.java
package com.flyingh.ifactory;
import com.flyingh.icpu.CPU;
public interface Factory {
CPU createCPU();
}
AMDFactory.java
package com.flyingh.factory;
import com.flyingh.cpu.AMD;
import com.flyingh.icpu.CPU;
import com.flyingh.ifactory.Factory;
public class AMDFactory implements Factory {
@Override
public CPU createCPU() {
// TODO Auto-generated method stub
return new AMD();
}
}
IntelFactory.java
package com.flyingh.factory;
import com.flyingh.cpu.Intel;
import com.flyingh.icpu.CPU;
import com.flyingh.ifactory.Factory;
public class IntelFactory implements Factory {
@Override
public CPU createCPU() {
// TODO Auto-generated method stub
return new Intel();
}
}
Client.java
package com.flyingh.client;
import com.flyingh.factory.AMDFactory;
import com.flyingh.factory.IntelFactory;
import com.flyingh.icpu.CPU;
import com.flyingh.ifactory.Factory;
public class Client {
public static void main(String[] args) {
Factory factory1 = new IntelFactory();
Factory factory2 = new AMDFactory();
CPU intel = factory1.createCPU();
CPU amd = factory2.createCPU();
System.out.println(intel.info());// Intel
System.out.println(amd.info());// AMD
}
}