工厂模式共分为到3类,分别是简单工厂模式、工厂方法模式和抽象工厂模式。
简单工厂模式是指原来由程序中创建对象改为由工厂创建对象,代码如下:
public interface Animal {
public void sound();
}
public class Cat implements Animal {
public Cat(){
System.out.println("this is a Cat!");
}
@Override
public void sound() {
System.out.println("miao miao");
}
}
public class Dog implements Animal {
public Dog(){
System.out.println("this is a Dog!");
}
@Override
public void sound() {
System.out.println("wang wang");
}
}
public class AnimalFactory {
public Animal create(String name){
if("dog".equals(name)){
return new Dog();
}else if("cat".equals(name)){
return new Cat();
}else{
return null;
}
}
}
工厂方法模式是指将提供一个创建对象的接口,让实现这个接口的类决定实例化哪一个对象,将对象的创建延迟到工厂的子类中进行。
//工厂接口
public interface AnimalFactory {
public Animal create();
}
//工厂接口实现类1
public class CatFactory implements AnimalFactory {
@Override
public Animal create() {
return new Cat();
}
}
//工厂接口实现类2
public class DogFactory implements AnimalFactory {
@Override
public Animal create() {
return new Dog();
}
}
抽象工厂模式是指提供一个创建一系列相关或相互依赖对象的接口,无需指定他们具体的类。
public interface Fridge {
}
public class GeliFridge implements Fridge {
}
public class HaierFridge implements Fridge {
}
public interface AirConditioner {
}
public class GeliAirConditioner implements AirConditioner {
}
public class HaierAirConditioner implements AirConditioner {
HaierAirConditioner(){
System.out.println("this is HaierAirConditioner");
}
}
public interface Factory {
public Fridge createFridge();
public AirConditioner createAirConditioner();
}
public class GeliFactory implements Factory {
@Override
public Fridge createFridge() {
return new GeliFridge();
}
@Override
public AirConditioner createAirConditioner() {
return new GeliAirConditioner();
}
}
public class HaierFactory implements Factory {
@Override
public Fridge createFridge() {
return new HaierFridge();
}
@Override
public AirConditioner createAirConditioner() {
return new HaierAirConditioner();
}
}
抽象工厂模式中涉及到产品族和产品等级结构两个概念,介绍如下:
产品族是指一系列相关的产品,如上述代码中介绍的冰箱和空调是两个产品族。
产品等级结构是指相同产品的不同制造方法,如代码中介绍的格力空调和海尔空调。