抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)

定义

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类

工厂方法和抽象工厂
  1. 工厂方法生产的对象为同一层级的,如苹果手机、三星手机和华为手机等
  2. 抽象工厂生产的对象为同一系列的,如苹果、三星和华为的手机、电脑和手环等
  3. 工厂方法一个工厂对应一个产品
  4. 抽象工厂一个工厂对应一个系列的产品
  5. 抽象工厂是工厂方法的扩展
优点
  1. 易于切换一系列产品
  2. 易于扩展新系列,符合开闭原则
缺点
  1. 扩展新产品时改动较大,如加个平板等
应用
  1. dao层,切换数据库,mysql、oracle、mongodb、redis的切换
  2. 框架整合,如切换持久层、数据源等
  3. 有多个系列,每个系列有多个产品的场景
代码演示
public class AbstractFactoryDemo {

    public static void main(String[] args) {
        // 苹果工厂 -- 1
        Factory factory = new AppleFactory();
        // 三星工厂 -- 2
//        Factory factory = new SamsungFactory();
        // 华为工厂 -- 3
//        Factory factory = new HuaWeiFactory();
        
        Phone phone = factory.createPhone();
        phone.call();
        Computer computer = factory.createComputer();
        computer.code();
        Bracelet bracelet = factory.createBracelet();
        bracelet.record();
        /*
        1
        用苹果手机打电话
        用苹果电脑写代码
        用苹果手环记录心跳
        
        2
        用三星手机打电话
        用三星电脑写代码
        用三星手环记录心跳
        
        3
        用华为手机打电话
        用华为电脑写代码
        用华为手环记录心跳
        */
    }
}

// 第一种产品:手机
interface Phone {
    void call();
}

// 苹果手机
class ApplePhone implements Phone {
    @Override
    public void call() {
        System.out.println("用苹果手机打电话");
    }
}

// 三星手机
class SamsungPhone implements Phone {
    @Override
    public void call() {
        System.out.println("用三星手机打电话");
    }
}

// 华为手机
class HuaWeiPhone implements Phone {
    @Override
    public void call() {
        System.out.println("用华为手机打电话");
    }
}

// 第二种产品:电脑
interface Computer {
    void code();
}

// 苹果电脑
class AppleComputer implements Computer {
    @Override
    public void code() {
        System.out.println("用苹果电脑写代码");
    }
}

// 三星电脑
class SamsungComputer implements Computer {
    @Override
    public void code() {
        System.out.println("用三星电脑写代码");
    }
}

// 华为电脑
class HuaWeiComputer implements Computer {
    @Override
    public void code() {
        System.out.println("用华为电脑写代码");
    }
}

// 第三种产品:手环
interface Bracelet {
    void record();
}

// 苹果手环
class AppleBracelet implements Bracelet {
    @Override
    public void record() {
        System.out.println("用苹果手环记录心跳");
    }
}

// 三星手环
class SamsungBracelet implements Bracelet {
    @Override
    public void record() {
        System.out.println("用三星手环记录心跳");
    }
}

// 华为手环
class HuaWeiBracelet implements Bracelet {
    @Override
    public void record() {
        System.out.println("用华为手环记录心跳");
    }
}

// 工厂
interface Factory {

    Phone createPhone();
    Computer createComputer();
    Bracelet createBracelet();
}

// 苹果工厂
class AppleFactory implements Factory {
    @Override
    public Phone createPhone() {
        return new ApplePhone();
    }

    @Override
    public Computer createComputer() {
        return new AppleComputer();
    }

    @Override
    public Bracelet createBracelet() {
        return new AppleBracelet();
    }
}

// 三星工厂
class SamsungFactory implements Factory {
    @Override
    public Phone createPhone() {
        return new SamsungPhone();
    }

    @Override
    public Computer createComputer() {
        return new SamsungComputer();
    }

    @Override
    public Bracelet createBracelet() {
        return new SamsungBracelet();
    }

}

// 华为工厂
class HuaWeiFactory implements Factory {
    @Override
    public Phone createPhone() {
        return new HuaWeiPhone();
    }

    @Override
    public Computer createComputer() {
        return new HuaWeiComputer();
    }

    @Override
    public Bracelet createBracelet() {
        return new HuaWeiBracelet();
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值