抽象工厂模式是工厂方法模式的升级版。工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。
类似于下面这种方式:
(1) 抽象工厂接口:提供了产品的生成方法。
interface AbstractFactory
{
public Product1 newProduct1();
public Product2 newProduct2();
}
(2) 具体工厂:实现了产品的生成方法。
class createFactory1 implements AbstractFactory
{
public Product1 newProduct1()
{
System.out.println("工厂 1 生成-->具体产品 11...");
return new createProduct11();
}
public Product2 newProduct2()
{
System.out.println("工厂 1 生成-->具体产品 21...");
return new createProduct21();
}
}
对之前的工厂方法模式进行改造:
public interface Cat {
void eat();
}
public interface Dog {
void eat();
}
public class WhiteCat implements Cat {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("whiteCat eat");
}
}
public class BlackCat implements Cat {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("BlackCat eat");
}
}
public class WhiteDog implements Dog {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("whiteDog eat");
}
}
public class BlackDog implements Dog{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("BlackDog eat");
}
}
工厂类的接口,生产两个等级的产品
public interface AnimalFactory {
Cat createCat();
Dog createDog();
}
不同的工厂类:
public class BlackAnimalFactory implements AnimalFactory {
@Override
public Cat createCat() {
// TODO Auto-generated method stub
return new BlackCat();
}
@Override
public Dog createDog() {
// TODO Auto-generated method stub
return new BlackDog();
}
}
public class WhiteAnimalFactory implements AnimalFactory{
@Override
public Cat createCat() {
// TODO Auto-generated method stub
return new WhiteCat();
}
@Override
public Dog createDog() {
// TODO Auto-generated method stub
return new WhiteDog();
}
}
测试类:
public class AnimalTest {
public static void main(String[] args) {
AnimalFactory blakAnimalFactory = new BlackAnimalFactory();
Cat blackCat=blakAnimalFactory.createCat();
blackCat.eat();
AnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();
Cat whiteCat=whiteAnimalFactory.createCat();
whiteCat.eat();
}
}
结果:
BlackCat eat
whiteCat eat
网友评论