【设计模式】-抽象工厂模式-AbstractFactory

简介

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,属于创建型模式。当有多个抽象产品时,选用抽象工厂模式。它能够为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。


角色

  • 多个抽象产品
  • 每个抽象产品又有多个具体产品
  • 一个抽象工厂
  • 多个具体工厂

使用示例

抽象产品1–键盘

interface IKeyboard {
    void input();
}

抽象产品2–鼠标

interface IMouse {
    void click();
}

抽象产品键盘–对应的具体产品1–联想键盘

class LXKeyboard implements IKeyboard {
    public LXKeyboard() {
        System.out.println("联想生产的键盘");
    }

    @Override
    public void input() {
        System.out.println("用联想键盘输入!");
    }

}

抽象产品键盘–对应的具体产品2–华硕键盘

class HSKeyboard implements IKeyboard {

    public HSKeyboard() {
        System.out.println("华硕生产的键盘");
    }

    @Override
    public void input() {
        System.out.println("用华硕键盘输入!");
    }

}

抽象产品鼠标–对应的具体产品1–联想鼠标

class LXMouse implements IMouse {
    public LXMouse() {
        System.out.println("联想生产的鼠标");
    }

    @Override
    public void click() {
        System.out.println("用联想鼠标点击!");
    }

}

抽象产品鼠标–对应的具体产品2–华硕鼠标

class HSMouse implements IMouse {
    public HSMouse() {
        System.out.println("华硕生产的鼠标");
    }

    @Override
    public void click() {
        System.out.println("用华硕鼠标点击!");
    }

}

抽象工厂–电脑生产工厂

abstract class ComputerFactory {
    abstract IKeyboard produceKeyboard();

    abstract IMouse produceMouse();
}

具体工厂1–联想电脑生产厂

class LxComputerFactory extends ComputerFactory {
    public LxComputerFactory() {
        System.out.println("这里是联想电脑生产工厂");
    }

    @Override
    IKeyboard produceKeyboard() {
        return new LXKeyboard();
    }

    @Override
    IMouse produceMouse() {
        return new LXMouse();
    }

}

具体工厂2–华硕电脑生产厂

class HsComputerFactory extends ComputerFactory {
    public HsComputerFactory() {
        System.out.println("这里是华硕电脑生产工厂");
    }

    @Override
    IKeyboard produceKeyboard() {
        return new HSKeyboard();
    }

    @Override
    IMouse produceMouse() {
        return new HSMouse();
    }

}

具体工厂3–组装电脑生产厂

class ZzComputerFactory extends ComputerFactory {
    public ZzComputerFactory() {
        System.out.println("这里是组装电脑生产工厂");
    }

    @Override
    IKeyboard produceKeyboard() {
        return new HSKeyboard();
    }

    @Override
    IMouse produceMouse() {
        return new LXMouse();
    }

}

测试代码

package org.iti.dm.abstractfactory;

public class AbstractFactoryMode {

    public static void main(String[] args) {
        ComputerFactory cf = new LxComputerFactory();
        IKeyboard keyboard = cf.produceKeyboard();
        IMouse mouse = cf.produceMouse();
        keyboard.input();
        mouse.click();
        cf = new HsComputerFactory();
        keyboard = cf.produceKeyboard();
        mouse = cf.produceMouse();
        keyboard.input();
        mouse.click();
        cf = new ZzComputerFactory();
        keyboard = cf.produceKeyboard();
        mouse = cf.produceMouse();
        keyboard.input();
        mouse.click();
    }

}

结果如下:
这里写图片描述


Demo完整代码

package org.iti.dm.abstractfactory;

public class AbstractFactoryMode {

    public static void main(String[] args) {
        ComputerFactory cf = new LxComputerFactory();
        IKeyboard keyboard = cf.produceKeyboard();
        IMouse mouse = cf.produceMouse();
        keyboard.input();
        mouse.click();
        cf = new HsComputerFactory();
        keyboard = cf.produceKeyboard();
        mouse = cf.produceMouse();
        keyboard.input();
        mouse.click();
        cf = new ZzComputerFactory();
        keyboard = cf.produceKeyboard();
        mouse = cf.produceMouse();
        keyboard.input();
        mouse.click();
    }

}

interface IKeyboard {
    void input();
}

interface IMouse {
    void click();
}

class HSKeyboard implements IKeyboard {

    public HSKeyboard() {
        System.out.println("华硕生产的键盘");
    }

    @Override
    public void input() {
        System.out.println("用华硕键盘输入!");
    }

}

class LXKeyboard implements IKeyboard {
    public LXKeyboard() {
        System.out.println("联想生产的键盘");
    }

    @Override
    public void input() {
        System.out.println("用联想键盘输入!");
    }

}

class HSMouse implements IMouse {
    public HSMouse() {
        System.out.println("华硕生产的鼠标");
    }

    @Override
    public void click() {
        System.out.println("用华硕鼠标点击!");
    }

}

class LXMouse implements IMouse {
    public LXMouse() {
        System.out.println("联想生产的鼠标");
    }

    @Override
    public void click() {
        System.out.println("用联想鼠标点击!");
    }

}

abstract class ComputerFactory {
    abstract IKeyboard produceKeyboard();

    abstract IMouse produceMouse();
}

class LxComputerFactory extends ComputerFactory {
    public LxComputerFactory() {
        System.out.println("这里是联想电脑生产工厂");
    }

    @Override
    IKeyboard produceKeyboard() {
        return new LXKeyboard();
    }

    @Override
    IMouse produceMouse() {
        return new LXMouse();
    }

}

class HsComputerFactory extends ComputerFactory {
    public HsComputerFactory() {
        System.out.println("这里是华硕电脑生产工厂");
    }

    @Override
    IKeyboard produceKeyboard() {
        return new HSKeyboard();
    }

    @Override
    IMouse produceMouse() {
        return new HSMouse();
    }

}

class ZzComputerFactory extends ComputerFactory {
    public ZzComputerFactory() {
        System.out.println("这里是组装电脑生产工厂");
    }

    @Override
    IKeyboard produceKeyboard() {
        return new HSKeyboard();
    }

    @Override
    IMouse produceMouse() {
        return new LXMouse();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值