抽象工厂方法

本文介绍了抽象工厂方法模式,它是在普通工厂方法上的扩展,一个工厂可生产多种产品。文中给出了该模式的特点,如多种产品接口及实现类、工厂接口及实现类等,并通过创建手机和耳机的代码示例展示了抽象工厂方法的具体实现。
/**
 * 抽象工厂方法:抽象工厂方法是在普通工厂方法上进行扩展的,普通工厂每个工厂类只会生产一种产品,例如富士康只生产iphone,而抽象工厂就是
 * 一个工厂可以生产多种产品,例如,富士康可以生产苹果手机,也可以生产苹果耳机
 * 该模式特点:1.有多种产品的接口以及对应的实现类(如手机接口,实现类为苹果手机和小米手机,耳机接口(实现类为苹果耳机和小米手机)
 *          2.有一个工厂接口和对应的实现类,如手机生产工厂接口,实现类纬创工厂,富士康工厂
 *          2.每个工厂类,具有同时生产多种产品的方法,例如富士康工厂,生产苹果手机和苹果耳机
 */

//创建手机接口
public interface Phone {
    void call();
}

//苹果手机对象
public class Iphone implements Phone {
    @Override
    public void call() {
        System.out.println("使用苹果手机打电话");
    }
}
//小米手机
public class MIPhone implements Phone {
    @Override
    public void call() {
        System.out.println("使用小米手机打电话");
    }
}
//耳机接口
public interface Earphone {
    void listenMusic();
}
//苹果耳机
public class AppleEarphone implements Earphone {
    @Override
    public void listenMusic() {
        System.out.println("用苹果耳机听音乐");
    }
}
//小米耳机
public class MiEarPhone implements Earphone {
    @Override
    public void listenMusic() {
        System.out.println("使用小米耳机听音乐");
    }
}
//工厂接口
public interface PhoneFactory {
    //生产手机
    Phone createPhone();
    //生产耳机
    Earphone createEarphone();
}
//生产苹果手机的工厂,如富士康
public class IPhoneFactory implements PhoneFactory {
    //生产苹果手机
    @Override
    public Phone createPhone() {
        return new Iphone();
    }
    //生产苹果耳机
    @Override
    public Earphone createEarphone() {
        return new AppleEarphone();
    }

}
//生产小米手机的工厂如纬创
public class MiPhoneFactory implements PhoneFactory {
    //生产小米手机
    @Override
    public Phone createPhone() {
        return new MIPhone();
    }
    //生产小米耳机
    @Override
    public Earphone createEarphone() {
        return new MiEarPhone();
    }
}
class test2{

    public static void main(String[] args) {
        //创建苹果手机和耳机
        PhoneFactory iPhoneFactory = new IPhoneFactory();
        iPhoneFactory.createPhone().call();
        iPhoneFactory.createEarphone().listenMusic();
        //创建小米手机和耳机
        PhoneFactory miPhoneFactory = new MiPhoneFactory();
        miPhoneFactory.createPhone().call();
        miPhoneFactory.createEarphone().listenMusic();
    }
}

 

转载于:https://www.cnblogs.com/yangxiaohui227/p/10905355.html

<think>好的,用户需要关于抽象工厂方法模式的示例代码或UML图解释。首先,我需要回顾一下抽象工厂模式的定义和核心概念。根据引用[1]和[5],抽象工厂模式用于创建一系列相关或依赖的对象,而无需指定具体类。它适用于产品族的场景。 接下来,用户可能需要一个具体的例子来理解。引用[2]提到抽象工厂模式的主要组件包括抽象工厂、具体工厂、抽象产品和具体产品。因此,我应该构造一个例子,比如不同操作系统的UI组件,如按钮和文本框,这样可以展示不同产品族的创建。 然后,UML图部分,引用[3]和[2]指出抽象工厂有具体工厂实现,每个工厂创建对应的产品。需要绘制一个UML图,显示AbstractFactory接口,两个具体工厂ConcreteFactory1和ConcreteFactory2,以及对应的抽象产品和具体产品之间的关系。 示例代码方面,参考引用[4]中的分类,抽象工厂通常有多个方法创建不同产品。例如,一个家具工厂创建椅子和桌子,现代和古典两种风格。抽象工厂接口定义创建方法,具体工厂实现这些方法生成具体产品。 需要确保代码结构清晰,展示抽象工厂、具体工厂、抽象产品和具体产品之间的协作。同时,结合UML图解释各部分的作用,比如抽象工厂如何被具体工厂继承,产品如何被创建。 最后,总结优点和适用场景,如更换产品族方便,符合开闭原则等,帮助用户全面理解。可能用户需要实际应用中的例子,所以选择常见的主题如UI组件或家具,这样更易理解。 检查引用是否准确,引用[1]、[2]、[5]主要解释抽象工厂的结构,引用[4]区分了工厂模式的类型,确保示例符合这些描述。避免使用简单工厂或工厂方法的例子,专注于抽象工厂的多产品族特性。</think>### 抽象工厂方法模式示例解析 #### 1. UML图解释 以下是抽象工厂模式的UML图简化表示: ``` [AbstractFactory] ◁—▷ [AbstractProductA] △ △ | | [ConcreteFactory1] [ConcreteProductA1] [ConcreteFactory2] [ConcreteProductA2] ``` - **抽象工厂(AbstractFactory)**:声明创建产品族的接口,例如`createButton()`和`createTextBox()`[^1][^2] - **具体工厂(ConcreteFactory)**:实现抽象工厂接口,如`WindowsFactory`和`MacOSFactory`生成特定风格控件[^3] - **抽象产品(AbstractProduct)**:定义产品接口规范,如`Button`需实现`render()`方法 - **具体产品(ConcreteProduct)**:实现接口的具体类,如`WindowsButton`或`MacOSTextBox` #### 2. 代码示例(Java实现) ```java // 抽象产品族 interface Button { void render(); } interface TextBox { void input(); } // 具体产品 class WindowsButton implements Button { public void render() { System.out.println("Windows风格按钮"); } } class MacOSButton implements Button { public void render() { System.out.println("macOS风格按钮"); } } // 抽象工厂 interface GUIFactory { Button createButton(); TextBox createTextBox(); } // 具体工厂 class WindowsFactory implements GUIFactory { public Button createButton() { return new WindowsButton(); } public TextBox createTextBox() { return new WindowsTextBox(); } } class MacOSFactory implements GUIFactory { public Button createButton() { return new MacOSButton(); } public TextBox createTextBox() { return new MacOSTextBox(); } } ``` #### 3. 模式特点 - **优点**:切换产品族方便(如更换操作系统风格)、保证产品兼容性、符合开闭原则[^4][^5] - **缺点**:新增产品类型需修改所有工厂接口(如增加`Checkbox`需改动所有工厂类) - **适用场景**:需要创建多个关联产品的系统(如跨平台UI、游戏角色装备系统)[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值