设计模式代码实战-抽象工厂模式

本文介绍了一个基于Java的问题,涉及如何设计一个系统处理家具订单,使用了抽象工厂模式来创建不同风格(现代和古典)的沙发和椅子。通过定义接口和工厂类,确保了代码的灵活性和可扩展性。
摘要由CSDN通过智能技术生成

1、问题描述

小明家新开了两个工厂用来生产家具,一个生产现代风格的沙发和椅子,一个生产古典风格的沙发和椅子,现在工厂收到了一笔订单,请你帮他设计一个系统,描述订单需要生产家具的信息。

输入试例:
3
modern
classical
modern

2、抽象工厂模式

在⼯⼚⽅法模式中,每个具体⼯⼚只负责创建单⼀的产品。但是如果有多类产品
呢,⽐如说“⼿机”,⼀个品牌的⼿机有⾼端机、中低端机之分,这些具体的产品都需要建⽴⼀个单独的⼯⼚类,但
是它们都是相互关联的,都共同属于同⼀个品牌,这就可以使⽤到【抽象⼯⼚模式】

作者认为,就是将具有某个共同特性的产品,统一交给某种工厂来创建,避免每个产品都要一个新工厂来生成。
在这里插入图片描述

3、代码

该题的统一特性为现代和经典,所以分为现代工厂和经典工厂

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int number=sc.nextInt();
        sc.nextLine();

        for(int i=0;i<number;i++){

            String s=sc.nextLine();
            if(s.equals("modern")){
                Factory modernFactory=new ModernFactory();
                Desk modernDesk=modernFactory.createProductDesk();
                Sofa modernSofa=modernFactory.createProductSofa();
                modernDesk.display();
                modernSofa.display();
            }else if(s.equals("classical")){
                Factory classicalFactory=new ClassicalFactory();
                Desk classicalDesk=classicalFactory.createProductDesk();
                Sofa classicalSofa=classicalFactory.createProductSofa();
                classicalDesk.display();
                classicalSofa.display();
            }


        }
    }
}
interface Sofa{
    void display();
}

interface Desk{
    void display();
}

class ModernSofa implements Sofa{

    @Override
    public void display() {
        System.out.println("modern sofa");
    }
}

class ClassicSofa implements Sofa{

    @Override
    public void display() {
        System.out.println("classical sofa");
    }
}

class ModernDesk implements Desk {


    @Override
    public void display() {
        System.out.println("modern chair");
    }
}

class ClassicDesk implements Desk{

    @Override
    public void display() {
        System.out.println("classical chair");
    }
}

interface Factory{
    Desk createProductDesk();
    Sofa createProductSofa();
}

class ModernFactory implements Factory{

    @Override
    public ModernDesk createProductDesk() {
        return new ModernDesk();
    }

    @Override
    public ModernSofa createProductSofa() {
        return new ModernSofa();
    }


}

class ClassicalFactory implements Factory{

    @Override
    public ClassicDesk createProductDesk() {
        return new ClassicDesk();
    }

    @Override
    public ClassicSofa createProductSofa() {
        return new ClassicSofa();
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值