【设计模式】抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )(二)

简介: 【设计模式】抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )(二)

五、抽象工厂模式代码示例


如果要新增 产品族 , 只需要增加 产品族工厂 , 对应的产品类 即可 ;

如果要新增 产品等级 , 很麻烦 , 需要修改所有的产品族工厂 , 这就违背了开闭原则 ;


产品等级结构固定 , 需要多个产品组合在一起形成产品族的 业务场景 , 适合使用抽象工厂模式 ;



业务场景 : 有两个电器品牌 , 美的 和 格力 ; 每个品牌下都有 冰箱 和 空调 产品 ;



1、冰箱抽象类


package abstractfactory;
/**
 * 冰箱抽象类
 */
public abstract class Fridge {
    public abstract void produce();
}



2、美的冰箱实现类


package abstractfactory;
/**
 * 美的冰箱
 */
public class MideaFridge extends Fridge {
    @Override
    public void produce() {
        System.out.println("生产美的冰箱");
    }
}



3、格力冰箱实现类


package abstractfactory;
/**
 * 格力冰箱
 */
public class GreeFridge extends Fridge {
    @Override
    public void produce() {
        System.out.println("生产格力冰箱");
    }
}



4、空调抽象类


package abstractfactory;
/**
 * 空调抽象类
 */
public abstract class AirConditioner {
    public abstract void produce();
}



5、美的空调实现类


package abstractfactory;
/**
 * 美的空调
 */
public class MideaAirConditioner extends AirConditioner {
    @Override
    public void produce() {
        System.out.println("生产美的空调");
    }
}



6、格力空调实现类


package abstractfactory;
/**
 * 格力空调
 */
public class GreeAirConditioner extends AirConditioner {
    @Override
    public void produce() {
        System.out.println("生产格力空调");
    }
}



7、工厂抽象接口 ( 重点 )


package abstractfactory;
/**
 * 抽象工厂方法
 */
public interface Factory {
    /**
     * 生产冰箱
     * @return
     */
    Fridge getFridge();
    /**
     * 生产空调
     * @return
     */
    AirConditioner getAirConditioner();
}



8、美的工厂实现类 ( 重点 )


package abstractfactory;
/**
 * 美的工厂
 */
public class MideaFactory implements Factory {
    @Override
    public Fridge getFridge() {
        return new MideaFridge();
    }
    @Override
    public AirConditioner getAirConditioner() {
        return new MideaAirConditioner();
    }
}


9、格力工厂实现类 ( 重点 )


package abstractfactory;
/**
 * 格力抽象工厂
 */
public class GreeFactory implements Factory {
    @Override
    public Fridge getFridge() {
        return new GreeFridge();
    }
    @Override
    public AirConditioner getAirConditioner() {
        return new GreeAirConditioner();
    }
}



10、测试类


package abstractfactory;
public class Main {
    public static void main(String[] args) {
        // 生产 美的 品牌的 冰箱 和 空调
        Factory mideaFactory = new MideaFactory();
        // 美的冰箱
        Fridge mideaFridge = mideaFactory.getFridge();
        mideaFridge.produce();
        // 美的空调
        AirConditioner mideaAirConditioner = mideaFactory.getAirConditioner();
        mideaAirConditioner.produce();
        System.out.println();
        // 生产 格力 品牌的 冰箱 和 空调
        Factory greeFactory = new GreeFactory();
        // 格力冰箱
        Fridge greeFridge = greeFactory.getFridge();
        greeFridge.produce();
        // 格力空调
        AirConditioner greeFridgeAirConditioner = greeFactory.getAirConditioner();
        greeFridgeAirConditioner.produce();
    }
}


执行结果 :


生产美的冰箱
生产美的空调
生产格力冰箱
生产格力空调


image.png

image.png

目录
相关文章
|
1月前
|
设计模式 存储 Java
23种设计模式,备忘录模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】备忘录模式是一种行为设计模式,它能在不破坏对象封装的前提下,捕获并保存对象的当前状态,以便后面可以恢复到这个状态。
28 0
|
20天前
|
设计模式 Java
【设计模式系列笔记】抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种设计模式,属于创建型模式之一。它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过引入抽象的工厂接口,使得客户端代码可以使用抽象的接口来创建一组相关的产品,而不关心这些产品的具体实现。
110 4
|
5天前
|
设计模式 前端开发 API
写出易维护的代码|React开发的设计模式及原则
本文对React社区里出现过的一些设计模式进行了介绍,并讲解了他们遵循的设计原则。
|
9天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
24 4
|
17天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
1月前
|
设计模式 算法 Java
23种设计模式,访问者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】访问者模式是一种将算法与对象结构分离的设计模式。这种模式主要用于执行一个操作(或一组操作)在一个对象结构的各元素上,它可以在不修改各元素的类的前提下定义新的操作。
19 2
|
1月前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
18 0
|
1月前
|
设计模式 算法 搜索推荐
23种设计模式,策略模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】设计模式是软件工程中的一种最佳实践指导,用于解决常见的设计问题。它们被分类为创建型、结构型和行为型模式。其中,策略模式是一种行为型设计模式,旨在定义一系列算法,封装每一个算法,并使它们可互换。策略模式允许算法独立于使用它们的客户端变化
22 1
|
1月前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
29 4
|
1月前
|
设计模式 Java
23种设计模式,观察者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。
24 2