记录设计模式之抽象工厂模式

本文详细介绍了抽象工厂模式的概念、应用场景、优缺点,并通过代码实例展示了如何在计算机硬件产品中实现这一设计模式。抽象工厂模式允许在不指定具体产品的前提下创建相关产品对象,降低了客户端对产品实现细节的依赖,同时也提供了产品系列的隔离。然而,该模式在扩展新产品时可能存在困难,增加了系统的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、定义与类型

二、使用场景

三、优缺点  

四、代码实例现


一、定义与类型

        定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类

        类型:创建型

二、使用场景

  • 客户端不依赖于产品类实例如何被创建、实现等细节
  • 强调一系列相关的产品对象(属于统一产品族)一起使用创建对象需要大量重复的代码
  • 提供一个产品类的库,所以的产品以同样的接口出现,从而使客户端不依赖具体实现

三、优缺点  

  • 优点
  • 具体产品在应用层代码隔离,无须关系创建细节
  • 将一个系列的产品统一到一起创建
    缺点
  • 规定了所有可能被创建的产品集合,产品族扩展新的产品困难,需要修改抽象工厂的接口
  • 增加了系统的抽象性和理解难度

四、代码实例现

        创建电脑工厂

public interface Pc {

        void play();
        void trunOff();
        void trunOn();
        void music();


}

        模拟戴尔厂商制造电脑

public class DellPc implements Pc{

    @Override
    public void play() {
        System.out.println("戴尔电脑打游戏");
    }

    @Override
    public void trunOff() {
        System.out.println("戴尔电脑关机");
    }

    @Override
    public void trunOn() {
        System.out.println("戴尔电脑开机");
    }


    @Override
    public void music() {
        System.out.println("戴尔电脑听歌");
    }
}

        模拟微星厂商制造电脑

public class MsiPc implements  Pc {



    @Override
    public void play() {
        System.out.println("微星电脑打游戏");
    }

    @Override
    public void trunOff() {
        System.out.println("微星电脑关机");
    }

    @Override
    public void trunOn() {
        System.out.println("微星电脑开机");
    }


    @Override
    public void music() {
        System.out.println("微星电脑听歌");
    }




}

         模拟鼠标工厂

public interface Mouse {

        void start();
        void shutdown();
        void setting();



}

         模拟戴尔制造鼠标

public class DellMouse implements Mouse {

    @Override
    public void start() {
        System.out.println("戴尔鼠标使用");
    }

    @Override
    public void shutdown() {
        System.out.println("戴尔鼠标放置");
    }

    @Override
    public void setting() {
        System.out.println("戴尔鼠标设置");
    }
}

        模拟微星制造鼠标

public class MsiMouse implements Mouse {
    @Override
    public void start() {
        System.out.println("微星鼠标使用");
    }

    @Override
    public void shutdown() {
        System.out.println("微星鼠标放置");
    }

    @Override
    public void setting() {
        System.out.println("微星鼠标设置");
    }
}

        创建抽象产品工厂

public interface IProductFactory {
    Pc pc();
    Mouse mouse();
}

         创建戴尔工厂

public class DellIProductFactory implements  IProductFactory {
    @Override
    public Pc pc() {
        return new DellPc();
    }

    @Override
    public Mouse mouse() {
        return new DellMouse();
    }
}

        创建微星工厂

public class MsiIProductFactory implements IProductFactory {
    @Override
    public Pc pc() {
        return new MsiPc();
    }

    @Override
    public Mouse mouse() {
        return new MsiMouse();
    }
}

        创建客户端

public class Client {

        public static void main(String[] args){
            System.out.println("=============戴尔系列产品=========");
            //戴尔工厂
            DellIProductFactory dellIProductFactory = new DellIProductFactory();

            Pc pc =  dellIProductFactory.pc();
           pc.music();
           pc.play();
            Mouse mouse = dellIProductFactory.mouse();
            mouse.setting();
            System.out.println("=============微星系列产品=========");
            //微星工厂
            MsiIProductFactory msiIProductFactory = new MsiIProductFactory();

            pc = msiIProductFactory.pc();
            pc.music();
            pc.play();
            mouse = msiIProductFactory.mouse();
            mouse.setting();
        }


}

抽象工厂主要分为4类:

  • AbstractFactory:抽象工厂角色,它声明了一组用于创建一种产品的方法,每一个方法对应一种产品
  • ConcreteFactory:具体工厂角色,它实现了在抽象工厂中定义的创建产品的方法,生产一组具体产品,这饿产品构件成了一个产品种类,每一个产品都位于某个产品等级结构中
  • AbstractProduct:抽象产品角色,为每种产品声明接口
  • ConcreteProduct:具体产品角色,定义了工厂生产的具体产品对象,实现抽象产品接口声明的业务方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

herrybody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值