简单工厂模式(静态工厂模式)
//抽象产品
public interface Fruit {
public void eat();
}
//具体产品-苹果
public class Apple implements Fruit{
@Override
public void eat() {
System.out.println("吃苹果");
}
}
//具体产品-香蕉
public class Balaner implements Fruit{
@Override
public void eat() {
System.out.println("吃香蕉");
}
}
//抽象工厂
public interface FruitFactory {
public static Fruit createFruit(String type){
Fruit fruit = null;
switch (type) {
case "1":
fruit = new Apple();
break;
case "2":
fruit = new Balaner();
}
return fruit;
}
}
//测试类
public class MainTest {
public static void main(String[] args) {
Fruit fruit = FruitFactory.createFruit("1");
fruit.eat();
}
}
工厂方法模式
//抽象工厂类
public interface FruitFactory {
//定义创建实例的方法
public Fruit createFruit();
}
//具体产品类-苹果
public class AppleFactory implements FruitFactory{
@Override
public Fruit createFruit() {
return new Apple();
}
}
//测试类
public class MainTest {
public static void main(String[] args) {
FruitFactory factory = new AppleFactory();
Fruit fruit = factory.createFruit();
fruit.eat();
}
}
抽象工厂模式
抽象工厂和抽象方法的区别在于抽象工厂可以生成多个产品
总结
工厂方法:
抽象工厂:
例如,汽车可以分为轿车、SUV、MPV等,也分为奔驰、宝马等。我们可以将奔驰的所有车看作是一个产品族,而将宝马的所有车看作是另一个产品族。分别对应两个工厂,一个是奔驰的工厂,另一个是宝马的工厂。
与工厂方法不同,奔驰的工厂不只是生产具体的某一个产品,而是一族产品(奔驰轿车、奔驰SUV、奔驰MPV)。“抽象工厂”的“抽象”指的是就是这个意思。
简单工厂 : 用来生产同一等级结构中的任意产品。(不支持拓展增加产品)
工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)
抽象工厂 :用来生产不同产品族的全部产品。(不支持拓展增加产品;支持增加产品族)