Java设计模式-抽象工厂模式Abstract Factory

简介

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
主要解决:主要解决接口选择的问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
如何解决:在一个产品族里面,定义多个产品。
关键代码:在一个工厂里聚合多个同类产品。

抽象工厂模式

具体的UML图如下:
UML图

接口类computer
/**
 * 创建电脑的接口
 */
public interface Computer {
    //生产电脑
    void build();
    //装饰电脑
    void decorate();
    //销售电脑
    void sold();
}
抽象dell电脑工厂类
public abstract class AbstractDellFactory implements Computer{
    @Override
    public void build() {
        System.out.println("生产Dell电脑");
    }

    @Override
    public void decorate() {
        System.out.println("装饰Dell电脑");
    }

    @Override
    public void sold() {
        System.out.println("销售Dell电脑");
    }
}
抽象联想电脑工厂类
public abstract class AbstrctLenoFactory implements Computer{
    @Override
    public void build() {
        System.out.println("生产联想电脑");
    }

    @Override
    public void decorate() {
        System.out.println("装饰联想电脑");
    }

    @Override
    public void sold() {
        System.out.println("销售联想电脑");
    }
}
抽象华为电脑工厂类
public abstract class AbstractHuaweiFactory implements Computer{
    @Override
    public void build() {
        System.out.println("生产Huawei电脑");
    }

    @Override
    public void decorate() {
        System.out.println("装饰Huawei电脑");
    }

    @Override
    public void sold() {
        System.out.println("销售Huawei电脑");
    }
}
Dell具体类
/**
 * dell
 */
public class DellInspironComputer extends AbstractDellFactory {

    public void build() {
        System.out.println("生产DellInspiron电脑");
    }
}
/**
 * dell G游戏本
 */
public class DellGComputer extends AbstractDellFactory {

    public void build() {
        System.out.println("生产DellG电脑");
    }
}

联想和华为实现类就不列举了。

电脑工厂类
/**
 * 电脑工厂类
 */
public interface ComputerFactory  {
    //制造dell电脑
    Computer createDellComputer();
    //制造华为电脑
    Computer createHuaweiComputer();
    //制造联想电脑
    Computer createLenoComputer();
}
抽象电脑工厂类
/**
 * 抽象工厂进行创建具体的类
 */
public abstract class AbstractComputerFactory implements ComputerFactory{
    /*
     * 使用抽象工厂进行创建一个具体的电脑实例
     */
    protected Computer createComputer(ComputerEnum computerEnum) {
        Computer computer = null;
        //如果传递进来不是一个Enum中具体的一个Element的话,则不处理
        if (!computerEnum.getComputername().equals("")) {
            try {
                //直接产生一个实例
                computer = (Computer)
                        Class.forName(computerEnum.getComputername()).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return computer;
    }
}
枚举类
/**
 * 枚举类进行列出所有具体的实例
 */
public enum ComputerEnum {

    DELLG("bulid.abstractfactory.DellGComputer"),
    DELLINSPIR("bulid.abstractfactory.DellInspironComputer"),
    HUAWEIPRO("bulid.abstractfactory.HuaweiProComputer"),
    HUAWEIMATEE("bulid.abstractfactory.HuaweiMateComputer"),
    LENOR7("bulid.abstractfactory.LenovoR7Computer"),
    LENOR9("bulid.abstractfactory.LenovoR9Computer");
    private String computername;

    ComputerEnum(String computername) {
        this.computername = computername;
    }
    public String getComputername() {
        return computername;
    }
}

java中的抽象类

抽象工厂类

总结

工厂模式符合面向对象设计的开闭原则,抽象工厂模式,还有一个非常大的有点,高内聚,低耦合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小刘同学要加油呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值