一、写在前面
- 创建型模式
- 建造者模式
- 结构型模式
- 行为型模式
- 工厂方法模式和抽象工厂模式都属于工厂模式,所以放在一起介绍了
二、介绍
- 为什么要工厂模式?工厂就像一个黑盒一样,所以用工厂模式来创建对象,所以最大的好处是能实现解耦
- 工厂模式有三种:
- 简单工厂模式(不属于23种)
- 工厂方法模式
- 抽象工厂模式
三、简单工厂模式
- 简单工厂模式不是一种设计模式,其实更像是一种编程习惯
public class SimpleCoffeeFactory {public Coffee createCoffee(String type) {Coffee coffee = null;if("americano".equals(type)) {coffee = new AmericanoCoffee();} else if("latte".equals(type)) {coffee = new LatteCoffee();}return coffee;}
}
- 优点:这种方法的优点是解耦了创建对象的过程
- 缺点:这种方法的缺点是如果想要继续增加咖啡的种类,还需要修改简单工厂的代码,违反了开闭原则
四、工厂方法模式
- 使用工厂方法模式,就可以解决以上问题
- 个人理解:工厂方法模式就是把几个工厂类用一个抽象工厂接口给泛化,实现更高层次的抽象
public interface CoffeeFactory {Coffee createCoffee();
}
public class LatteCoffeeFactory implements CoffeeFactory {public Coffee createCoffee() {return new LatteCoffee();}
}
public class AmericanCoffeeFactory implements CoffeeFactory {public Coffee createCoffee() {return new AmericanCoffee();}
}
- 显而易见,这种方法的缺点是:每创建一种咖啡,就要创建一个工厂类和一个咖啡类
五、抽象工厂模式
- 上面的工厂方法模式只考虑一种产品的创建方法,比如都是创建咖啡,而做不到创建其他种类
- 抽象工厂模式的核心思想是:如果把抽象工厂作为一级,内部是一个一个产品类。那么接下来的二级类就是一个一个的产品族,比如把腾讯、阿里,在二级类中,创建他们一个一个的产品生产
public interface DessertFactory {Coffee createCoffee();Dessert createDessert();
}
public class AmericanDessertFactory implements DessertFactory {public Coffee createCoffee() {return new AmericanCoffee();}public Dessert createDessert() {return new MatchaMousse();}
}
public class ItalyDessertFactory implements DessertFactory {public Coffee createCoffee() {return new LatteCoffee();}public Dessert createDessert() {return new Tiramisu();}
}