自学内容网 自学内容网

设计模式——工厂方法模式(2)&抽象工厂模式(3)

一、写在前面

  • 创建型模式
    • 单例模式
    • 工厂方法模式
    • 抽象工厂模式
    • 原型模式
    • 建造者模式
  • 结构型模式
  • 行为型模式
  • 工厂方法模式和抽象工厂模式都属于工厂模式,所以放在一起介绍了

二、介绍

  • 为什么要工厂模式?工厂就像一个黑盒一样,所以用工厂模式来创建对象,所以最大的好处是能实现解耦
  • 工厂模式有三种:
    • 简单工厂模式(不属于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();
}
}

原文地址:https://blog.csdn.net/m0_73742812/article/details/142861810

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!