上一篇少简单工厂模式,因为违反开闭原则,现工厂方法模式进行改良。
角色:
抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
public interface CarFactory {
public Car create();
}
class BWMFactory implements CarFactory{
@Override
public Car create() {
Car car= new BMW();
car.setColor("red");
car.addTyre("米其林");
return car;
}
}
class BenzFactory implements CarFactory{
@Override
public Car create() {
Car car= new Benz();
car.setColor("green");
car.addTyre("米其林二代");
return car;
}
}
class AudiFactory implements CarFactory{
@Override
public Car create() {
Car car= new Audi();
car.setColor("write");
car.addTyre("米其林三代");
return car;
}
}
public class Client {
public static void main(String[] args) {
new BWMFactory().create().run();
new BenzFactory().create().run();
new AudiFactory().create().run();
}
}
工厂方法模式就是生产一种汽车就是多加一个工厂子类和一个具体产品,这样不用修改原来的类,虽然避免的开闭原则的发生,但是导致会出现很多类,用的不当会出现类爆炸的现象,使程序便的复杂。下一章介绍抽象工厂模式。