设计模式-工厂模式(03)

抽象工厂模式

抽象工厂模式也就是不仅生产鼠标,还可以生产键盘等其它配件。
也就是说 PcFactory 厂商是个父类,有生产鼠标,生产键盘两个接口。
戴尔工厂、惠普工厂分别继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。
创建工厂时,由戴尔工厂或者惠普工厂创建。
后续工厂.生产鼠标()则生产鼠标,工厂.生产键盘()则生产键盘。
在这里插入图片描述
实现:

  1. mouse基础类
/**
 * 鼠标抽象类
 *
 * @author liuyuan
 * @version BaseMouse.java, v 0.1 2020-04-12 11:21
 */
public abstract class BaseMouse {

    /**
     * 生产鼠标的抽象方法
     */
    public abstract void sayHi();
}


/**
 * 戴尔实现类
 *
 * @author liuyuan
 * @version DellMouse.java, v 0.1 2020-04-12 11:23
 */
public class DellMouse extends BaseMouse {

    @Override
    public void sayHi() {
        System.out.println("dell 生产鼠标~");
    }
}


/**
 * 惠普实现类
 *
 * @author liuyuan
 * @version HpMouse.java, v 0.1 2020-04-12 11:23
 */
public class HpMouse extends BaseMouse {

    @Override
    public void sayHi() {
        System.out.println("HP 生产鼠标~");
    }
}


  1. keybo基础类
/**
 * 键盘抽象类
 *
 * @author liuyuan
 * @version BaseKeybo.java, v 0.1 2020-04-12 11:21
 */
public abstract class BaseKeybo {

    /**
     * 生产键盘的抽象方法
     */
    public abstract void sayHi();
}


/**
 * @author liuyuan
 * @version DellKeybo.java, v 0.1 2020-04-12 11:43
 */
public class DellKeybo extends BaseKeybo {

    @Override
    public void sayHi() {
        System.out.println("dell 生产键盘~");
    }
}


/**
 * @author liuyuan
 * @version HpKeybo.java, v 0.1 2020-04-12 11:43
 */
public class HpKeybo extends BaseKeybo {

    @Override
    public void sayHi() {
        System.out.println("HP 生产键盘~");
    }
}
  1. factory工厂类
import com.example.designmode.factory.absfactory.keybo.BaseKeybo;
import com.example.designmode.factory.factorymethod.mouse.BaseMouse;

/**
 * 工厂抽象类
 *
 * @author liuyuan
 * @version BasePcFactory.java, v 0.1 2020-04-12 11:25
 */
public abstract class BasePcFactory {

    public abstract BaseMouse greatMouse();

    public abstract BaseKeybo greatKeybo();
}


import com.example.designmode.factory.absfactory.keybo.BaseKeybo;
import com.example.designmode.factory.absfactory.keybo.DellKeybo;
import com.example.designmode.factory.factorymethod.mouse.BaseMouse;
import com.example.designmode.factory.factorymethod.mouse.DellMouse;

/**
 * @author liuyuan
 * @version DellFactory.java, v 0.1 2020-04-12 11:36
 */
public class DellFactory extends BasePcFactory {

    @Override
    public BaseMouse greatMouse() {
        return new DellMouse();
    }

    @Override
    public BaseKeybo greatKeybo() {
        return new DellKeybo();
    }
}


import com.example.designmode.factory.absfactory.keybo.BaseKeybo;
import com.example.designmode.factory.absfactory.keybo.HpKeybo;
import com.example.designmode.factory.factorymethod.mouse.BaseMouse;
import com.example.designmode.factory.factorymethod.mouse.HpMouse;

/**
 * @author liuyuan
 * @version HpFactory.java, v 0.1 2020-04-12 11:36
 */
public class HpFactory extends BasePcFactory {

    @Override
    public BaseMouse greatMouse() {
        return new HpMouse();
    }

    @Override
    public BaseKeybo greatKeybo() {
        return new HpKeybo();
    }
}
  1. 测试
/**
 * fshows.com
 * Copyright (C) 2013-2020 All Rights Reserved.
 */
package com.example.designmode.factory.absfactory;

import com.example.designmode.factory.absfactory.factory.BasePcFactory;
import com.example.designmode.factory.absfactory.factory.DellFactory;
import com.example.designmode.factory.absfactory.factory.HpFactory;

/**
 * 抽象工厂模式
 *
 * @author liuyuan
 * @version Test.java, v 0.1 2020-04-12 11:48
 */
public class Test {

    public static void main(String[] args) {

        System.out.println("~抽象工厂模式~");

        BasePcFactory pcFactory = new DellFactory();
        // dell 生产键盘~
        pcFactory.greatKeybo().sayHi();
        // dell 生产鼠标~
        pcFactory.greatMouse().sayHi();

        pcFactory = new HpFactory();
        // HP 生产鼠标~
        pcFactory.greatMouse().sayHi();
        // HP 生产键盘~
        pcFactory.greatKeybo().sayHi();
    }
}

增加一个工厂怎么实现?

假设我们增加华硕工厂,则我们需要增加华硕工厂,和戴尔工厂一样,继承 PC 厂商。
之后创建华硕鼠标,继承鼠标类。创建华硕键盘,继承键盘类即可。
在这里插入图片描述

增加一个产品怎么实现?

假设我们增加耳麦这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。
之后在PC厂商这个父类中,增加生产耳麦的接口。最后在戴尔工厂,惠普工厂这两个类中,分别实现生产戴尔耳麦,惠普耳麦的功能。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值