抽象工厂模式
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
适用于:
- 一个系统要独立完成它的产品的创建、组合和表示时
- 一个系统要由多个产品系列中的一个来配对时
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时
参与者:
- AbstractFactory:声明一个创建抽象产品对象的操作接口
- ConcrateFactory:实现创建具体产品对象的操作
- AbstractProduct:为一类产品对象声明一个接口
- ConcrateProduct:定义一个将被相应的具体工厂创建的产品对象
- Client:仅使用由AbstractFactory和AbstractProduct类声明的接口
example:
类图:
代码:
package chouxianggc;
public interface AnimalFactory {
Cat creatCat();
Dog creatDog();
}
package chouxianggc;
public class BlackAnimalFactory implements AnimalFactory {
@Override
public Cat creatCat() {
return new BlackCat();
}
@Override
public Dog creatDog() {
return new BlackDog();
}
}
package chouxianggc;
public class WhiteAnimalFactory implements AnimalFactory {
@Override
public Dog creatDog() {
return new WhiteDog();
}
@Override
public Cat creatCat() {
return new WhiteCat();
}
}
package chouxianggc;
public interface Cat {
void eat();
}
package chouxianggc;
public interface Dog {
void eat();
}
package chouxianggc;
public class BlackCat implements Cat {
@Override
public void eat() {
System.out.println("The black cat is eating");
}
}
package chouxianggc;
public class BlackDog implements Dog {
@Override
public void eat() {
System.out.println("The black dog is eating");
}
}
package chouxianggc;
public class WhiteCat implements Cat {
@Override
public void eat() {
System.out.println("The white cat is eating");
}
}
package chouxianggc;
public class WhiteDog implements Dog {
@Override
public void eat() {
System.out.println("The white dog is eating");
}
}
package chouxianggc;
public class Client {
public static void main(String[] args) {
AnimalFactory blackAnimalFactory = new BlackAnimalFactory();
Cat blackCat = blackAnimalFactory.creatCat();
blackCat.eat();
Dog blackDog = blackAnimalFactory.creatDog();
blackDog.eat();
AnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();
Cat whiteCat = whiteAnimalFactory.creatCat();
whiteCat.eat();
Dog whiteDog = whiteAnimalFactory.creatDog();
whiteDog.eat();
}
}
测试结果: