当前位置: 首页 > news >正文

抽象工厂模式

抽象工厂模式

抽象工厂模式是一种创建型设计模式,旨在提供一个接口来创建一系列相关或依赖对象,而无需指定其具体类。
同级别产品指同一类型产品,,同产品族是指一组相关的对象或产品,类似同一品牌。
抽象工厂模式是工厂方法模式的升级版,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。
抽象工厂模式结构:
抽象工厂(Abstract Factory):声明创建不同产品的方法(如 createButton(), createTextbox())。
具体工厂(Concrete Factory):实现抽象工厂接口,生成具体产品(如 WindowsFactory 创建 Windows 风格组件)。
抽象产品(Abstract Product):定义产品接口(如 Button, Textbox)。
具体产品(Concrete Product):实现抽象产品接口(如 WindowsButton, MacTextbox)。

具体案例:
咖啡店拓展原有业务,不仅生产咖啡,还需要生产甜点(如提拉米苏,抹茶慕斯等)。这种情况下,拿铁咖啡和美式咖啡是同一产品等级,都是咖啡这一种类。而拿铁咖啡和提拉米苏是同一产品族,都属于意大利风味。

具体实例如下:

//咖啡
public abstract class Coffee {
    //咖啡名
    public abstract String getName();
    //加糖
    public void addSuger(){
        System.out.println("Add Suger");
    }

    //加牛奶
    public void addMilk(){
        System.out.println("Add Milk");
    }
}


public class AmericanCoffee extends Coffee {
    @Override
    public String getName() {
        return "美式咖啡";
    }
}

public class LatteCoffee extends Coffee {
    @Override
    public String getName() {
        return "拿铁咖啡";
    }
}

//甜品


public abstract class Dessert {
    public abstract void show();
}

//提拉米苏甜点
public class Trimisu extends Dessert{
    @Override
    public void show() {
        System.out.println("提拉米苏");
    }
}

//抹茶甜点
public class MatchaMousse extends Dessert{
    @Override
    public void show() {
        System.out.println("抹茶");
    }
}



//工厂接口
public interface DessertFactory {
    //生产咖啡
    Coffee createCoffee();

    //生产甜点
    Dessert createDessert();
}


//意大利风味甜品工厂,拿铁和提拉米苏
public class ItalyDesserFactory implements DessertFactory{
    @Override
    public Coffee createCoffee() {
        return new LatteCoffee();
    }

    @Override
    public Dessert createDessert() {
        return new Trimisu();
    }
}

//美式风味,美式咖啡和抹茶甜品
public class AmericanDessertFactory implements DessertFactory {
    @Override
    public Coffee createCoffee() {
        return new AmericanCoffee();
    }

    @Override
    public Dessert createDessert() {
        return new MatchaMousse();
    }
}



//测试类
public class Client {
    public static void main(String[] args) {
        //创建的是意大利风味甜品工厂对象
        //ItalyDesserFactory factory=new ItalyDesserFactory();
        AmericanDessertFactory factory = new AmericanDessertFactory();
        //获取拿铁咖啡和提拉米苏甜品
        Coffee coffee = factory.createCoffee();//意大利
        Dessert dessert = factory.createDessert();//意大利
        System.out.println(coffee.getName());
        dessert.show();
    }
}

如果接下来需要添加同一个产品族,只需要再加一个对应工厂即可不需要修改其他的类。

优点:当一个产品族中的多个对象被设计成一起工作时,他能保证客户端始终只使用同一个产品族中的对象。
缺点:当产品族中需要增加一个新产品时,所有工厂类都需要进行修改

相关文章:

  • python报错: AttributeError: module ‘clr‘ has no attribute ‘AddReference‘
  • Browser Copilot 开源浏览器扩展,使用现有或定制的 AI 助手来完成日常 Web 应用程序任务。
  • 六十天前端强化训练之第十九天全面掌握组件通信:父子组件 Props 传值终极指南
  • 设计模式-工厂模式、策略模式、代理模式、责任链模式
  • 蓝桥杯备赛-二分-跳石头
  • 《P1540 [NOIP 2010 提高组] 机器翻译 题解》
  • 中小型企业大数据平台全栈搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆级配置指南
  • 开源数据仓库全解 — 从原理到实践
  • 【Excel】- 导入报错Can not find ‘Converter‘ support class LocalDateTime
  • 变频器与电机共地可能引发的电磁耦合会引起的故障
  • 【蓝桥杯】24省赛:数字串个数
  • 如何在实际应用中测量和调整直线导轨的预紧力?
  • c++stl之unordered-map以及set
  • CentOS系统中使用sendmail
  • Python爬虫:playwright的使用
  • 【数据结构】数据结构,算法 概念
  • @SpringBootApplication
  • 9.贪心算法
  • 每日一题---单词搜索(深搜)
  • 本地化部署Deepseek关于Ollama 安全加固方案(新手易学)
  • 设计网站都有哪些/杭州seo薪资水平
  • 做童装在哪个网站找客户/网络推广企业
  • 做网站选什么专业/网站开发与设计
  • 西安网站建设公/有道搜索引擎入口
  • 新手学做网站/友情链接交易网站源码
  • 购物网站制作代码/360应用商店