c真的学不会 2025-05-18 15:03 采纳率: 50%
浏览 8

设计模式抽象工厂模式代码和画图

img


抽象工厂模式最早的应用之一是用来创建在不同操作系统的图形环境下都能够运行的应用程序,比如同时支持Windows与 Linux操作系统。在每一个操作系统中都有一个由图形构件组成的构件家族,可以通过一个抽象角色给出功能定义,而由具体子类给出不同操作系统下的具体实现,例如系统中包含两个产品等级结构,分别是Button 与Text;同时包含3个产品族,即 UNIX产品族、Linux产品族与Windows产品族,如下图所示。
图中,Windows中的Button 和Text 构成了一个Windows产品族,而不同操作系统下的Button 构成了一个产品等级结构。试使用抽象工厂模式来设计并模拟实现该结构。
代码怎么写,图怎么画

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-05-18 15:04
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    抽象工厂模式代码实现

    1. 定义抽象工厂接口 AbstractFactory

    public interface AbstractFactory {
        Button createButton();
        Text createText();
    }
    

    2. 定义具体工厂类 WindowsFactoryUnixFactory

    // Windows工厂类
    public class WindowsFactory implements AbstractFactory {
    
        @Override
        public Button createButton() {
            return new WindowsButton();
        }
    
        @Override
        public Text createText() {
            return new WindowsText();
        }
    }
    
    // Unix工厂类
    public class UnixFactory implements AbstractFactory {
    
        @Override
        public Button createButton() {
            return new UnixButton();
        }
    
        @Override
        public Text createText() {
            return new UnixText();
        }
    }
    

    3. 定义抽象产品接口 ButtonText

    // Button接口
    public interface Button {
        void display();
    }
    
    // Text接口
    public interface Text {
        void display();
    }
    

    4. 定义具体产品类 WindowsButton, WindowsText, UnixButton, UnixText

    // WindowsButton具体产品类
    public class WindowsButton implements Button {
        @Override
        public void display() {
            System.out.println("Displaying Windows Button");
        }
    }
    
    // WindowsText具体产品类
    public class WindowsText implements Text {
        @Override
        public void display() {
            System.out.println("Displaying Windows Text");
        }
    }
    
    // UnixButton具体产品类
    public class UnixButton implements Button {
        @Override
        public void display() {
            System.out.println("Displaying Unix Button");
        }
    }
    
    // UnixText具体产品类
    public class UnixText implements Text {
        @Override
        public void display() {
            System.out.println("Displaying Unix Text");
        }
    }
    

    5. 客户端代码

    public class Client {
        public static void main(String[] args) {
            // 创建Windows工厂
            AbstractFactory windowsFactory = new WindowsFactory();
    
            // 使用Windows工厂创建Button和Text
            Button button = windowsFactory.createButton();
            Text text = windowsFactory.createText();
    
            // 显示Button和Text
            button.display();
            text.display();
    
            // 创建Unix工厂
            AbstractFactory unixFactory = new UnixFactory();
    
            // 使用Unix工厂创建Button和Text
            Button unixButton = unixFactory.createButton();
            Text unixText = unixFactory.createText();
    
            // 显示Button和Text
            unixButton.display();
            unixText.display();
        }
    }
    

    设计模式图解

    抽象工厂模式的UML图

    +-------------------+
    | AbstractFactory   |
    |-------------------|
    | +createButton(): Button |
    | +createText(): Text  |
    +-------------------+
              |
              | 实现
              v
    +-------------------+      +-------------------+
    | WindowsFactory    |------>| UnixFactory       |
    |-------------------|      |-------------------|
    | +createButton(): Button |  | +createButton(): Button |
    | +createText(): Text  |  | +createText(): Text  |
    +-------------------+      +-------------------+
              |                          |
              | 实现                     | 实现
              v                          v
    +-------------------+      +-------------------+
    | Button            |      | Text              |
    |-------------------|      |-------------------|
    | +display(): void  |      | +display(): void  |
    +-------------------+      +-------------------+
              |                          |
              | 实现                     | 实现
              v                          v
    +-------------------+      +-------------------+
    | WindowsButton     |      | UnixButton        |
    |-------------------|      |-------------------|
    | +display(): void  |      | +display(): void  |
    +-------------------+      +-------------------+
              |                          |
              | 实现                     | 实现
              v                          v
    +-------------------+      +-------------------+
    | WindowsText       |      | UnixText          |
    |-------------------|      |-------------------|
    | +display(): void  |      | +display(): void  |
    +-------------------+      +-------------------+
    

    说明:

    • AbstractFactory:抽象工厂接口,定义了创建Button和Text的方法。
    • WindowsFactoryUnixFactory:具体工厂类,分别实现了Windows和Unix下的具体产品。
    • ButtonText:抽象产品接口,定义了Button和Text的行为。
    • WindowsButton, WindowsText, UnixButton, UnixText:具体产品类,分别实现了Windows和Unix下的具体产品。

    总结

    通过抽象工厂模式,我们可以轻松地在不同的操作系统之间切换,而不需要修改客户端代码。只需更换具体的工厂类即可实现不同操作系统的图形构件。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月18日