设计模式:抽象工厂模式

简介

  • 抽象工厂模式:对不同构建产品的工厂,再进行抽象的工厂。

应用场景

  • 一个系统由多个产品系列中的一个来配置时。
  • 一个系统要独立于它的产品的创建,组合和表示。
  • 当你强调一系列相关的产品对象的设计以便联合使用时。(需要对产品的工厂进行再进行抽象,形成抽象工厂)
  • 当你提供的产品类库,而只是想显示他们的接口而不是实现时候。

意图

  • 创建一系列相关或相互依赖的接口,而不需要指定具体的类

参与者

  • AbstractFactory:创造抽象的产品对象的操作接口
  • ConcreteFactory:实现具体创造抽象的产品对象操作
  • AbstractProduct:为产品对象声明抽象接口
  • ConcreteProduct:实现抽象产品接口的对象
  • Client:仅使用AbstractFactory和AbstractProduct抽象接口

结构

在这里插入图片描述

协作

  • 通常在运行时刻创建一个具体工厂ConcreteFactory的实例,这个对象具有实现特定具体的产品对象。
  • AbstractFactory将产品对象的创建延迟到他的ConcreteFactory的子类上。

效果

AbstractFactory工厂模式优缺点

  • 它分离具体的实现类
  • 它使得易于交换产品系列。(场景:一个具体工厂类在应用中仅出现一次)
  • 它有利于产品的一致性。
  • 难以支持新的产品。

实例

场景:鼠标,键盘为产品,惠普,戴尔为工厂。
需求:客户购买不同产品,产品是由不同的工厂创造的,不同的工厂生产不同的产品。
在这里插入图片描述
(1)键盘产品抽象类


/**
 * 键盘产品的抽象类
 * Created by shixinshan on 2018/10/25.
 */

public abstract class keybo {

    public abstract String sayHi();
}


(2)鼠标产品的抽象类

public abstract class Mouse {

    public abstract String sayHi();
}

(3)键盘产品具体实现类
惠普键盘产品

public class DellKeybo extends keybo {


    @Override
    public String sayHi() {

        return "I am a dell keybo";
    }
}


戴尔键盘产品

public class DellKeybo extends keybo {


    @Override
    public String sayHi() {

        return "I am a dell keybo";
    }
}

(4)鼠标产品具体实现类
惠普鼠标

public class HpMouse extends Mouse {
    @Override
    public String sayHi() {
        return "I am Hp mouse";
    }
}


戴尔鼠标

public class DellMouse extends Mouse {
    @Override
    public String sayHi() {
        return "I am dell mouse";
    }
}


(5)抽象工厂类

public abstract class AbstractFactory {
    public abstract keybo createKeybo();
    public abstract Mouse createMouse();
}

(5)实现抽象工厂类的具体工厂类
惠普工厂

public class HpFactory extends AbstractFactory {
    @Override
    public keybo createKeybo() {
        return new HpKeybo();
    }

    @Override
    public Mouse createMouse() {
        return new HpMouse();
    }
}


戴尔工厂


public class DellFactory extends AbstractFactory {
    @Override
    public keybo createKeybo() {
        return new DellKeybo();
    }

    @Override
    public Mouse createMouse() {
        return new DellMouse();
    }
}


测试

  @Test
    public void abstractFactory() throws Exception {


        AbstractFactory dellfactory = new DellFactory();
        keybo keybo = dellfactory.createKeybo();
        System.out.println("keybo :"+ keybo.sayHi());

        AbstractFactory hpfactory = new HpFactory();
        Mouse mouse = hpfactory.createMouse();
        System.out.println("mouse :"+mouse.sayHi());


    }

结果

keybo :I am a dell keybo
mouse :I am Hp mouse

Process finished with exit code 0

参考资料

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值