常用设计模式-抽象工厂模式

抽象工厂模式

基础概念

抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。(用来生产不同产品族的全部产品。)

自己的理解

  • 抽象工厂模式我觉得就是对工厂方法模式的继续抽象,举个例子:现在有大众、奥迪两个品牌,然后每种品牌还有单车、汽车不同类型,之前工厂方法是设计一个工厂接口,然后分别实现大众汽车单车、奥迪汽车单车的实现类分别创建4个不同工厂。在抽象工厂模式中,继续抽象,他是设计一个工厂接口,然后分别实现两个工厂,并在每个工厂中分别实现两个方法,分别创建单车、汽车。
  • 就是如果每个品牌的产品族非常重合,就比较适合抽象工厂模式。比如小米、华为,有手机,耳机等等。反之就是工厂方法模式。比如小米和美的,这两种就很不重合。

代码实现(以汽车为例)

首先创建汽车的接口,以及实现类

package 抽象工厂;

public interface car {
    void getName();
    void run();
}
class aodiCar implements car{
    @Override
    public void getName() {
        System.out.println("这是一脸奥迪汽车");
    }

    @Override
    public void run() {
        System.out.println("奥迪汽车可以跑");
    }
}

class dazhongCar implements car{
    @Override
    public void getName() {
        System.out.println("这是一辆大众汽车");
    }

    @Override
    public void run() {
        System.out.println("大众汽车可以跑");
    }
}

接着创建单车的接口及其实现类

package 抽象工厂;

public interface bike {
    void getName();
    void take();
}

class aodiBike implements bike{

    @Override
    public void getName() {
        System.out.println("这是一俩奥迪单车");
    }

    @Override
    public void take() {
        System.out.println("奥迪单车可以骑");

    }
}

class dazhongBike implements bike {

    @Override
    public void getName() {
        System.out.println("这是一辆大众单车");
    }

    @Override
    public void take() {
        System.out.println("大众单车可以骑");
    }
}

接着创建工厂类

package 抽象工厂;

public interface factory {
    car getCar();
    bike getBike();
}

class aodiFactory implements factory{
    @Override
    public car getCar() {
        return new aodiCar();
    }

    @Override
    public bike getBike() {
        return new aodiBike();
    }
}

class dazhongFactory implements factory {

    @Override
    public car getCar() {
        return new dazhongCar();
    }

    @Override
    public bike getBike() {
        return new dazhongBike();
    }
}

最后进行测试

package 抽象工厂;

public class test {
    public static void main(String[] args) {
        factory dazhong = new dazhongFactory();
        factory aodi = new aodiFactory();

        bike dazhongbike = dazhong.getBike();
        dazhongbike.getName();
        dazhongbike.take();
        car dazhongcar = dazhong.getCar();
        dazhongcar.getName();
        dazhongcar.run();

        System.out.println("=================================");
        car aodicar = aodi.getCar();
        aodicar.getName();
        aodicar.run();
        bike aodibike = aodi.getBike();
        aodibike.getName();
        aodibike.take();



    }
}

在这里插入图片描述

类图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值