设计模式-抽象工厂模式(四)

简介

相对于工厂模式更加抽象,能创建更多商品,如手机,电视,洗衣机,不单单是一类产品
增加产品时不用修改抽象工厂,但需要修改其他的工厂类
主要模块

  • 抽象工厂
  • 抽象产品
  • 真实工厂
  • 真实产品

例子

抽象工厂

//抽象工厂
public interface AbstractFactory {
    //可以生产多种商品

    //生产杯子
    CupProduct newCup();

    //生产手机
    PhoneProduct newPhone();

}

抽象产品(手机)

public interface PhoneProduct {

    void call();
}

抽象产品(杯子)

public interface CupProduct {

    void drink();
}

真实产品(苹果手机)

public class ApplePhone implements PhoneProduct {
    @Override
    public void call() {
        System.out.println("ApplePhone");
    }
}

真实产品(三星手机)

public class SumPhone implements PhoneProduct {
    @Override
    public void call() {
        System.out.println("SumPhone");
    }
}

真实产品(水杯)

public class WaterCup implements CupProduct {
    @Override
    public void drink() {
        System.out.println("WaterCup");
    }
}

真实产品(牛奶杯)

public class MilkCup implements CupProduct{
    @Override
    public void drink() {
        System.out.println("MilkCup");
    }
}

真实工厂(苹果-水杯工厂)

public class Factory1 implements AbstractFactory {
    @Override
    public CupProduct newCup() {
        return new WaterCup();
    }

    @Override
    public PhoneProduct newPhone() {
        return new ApplePhone();
    }
}

真实工厂(三星-牛奶杯工厂)

public class Factory2 implements AbstractFactory {
    @Override
    public CupProduct newCup() {
        return new MilkCup();
    }

    @Override
    public PhoneProduct newPhone() {
        return new SumPhone();
    }
}

测试

public class Main {
    public static void main(String[] args) {
        //苹果水杯工厂
        Factory1 factory1 = new Factory1();
        //三星牛奶工厂
        Factory2 factory2 = new Factory2();

        //生产 苹果手机
        factory1.newPhone().call();//ApplePhone

        //生产 三星手机
        factory2.newPhone().call();//SumPhone

        //生产 水杯
        factory1.newCup().drink();//WaterCup

        //生产 牛奶杯
        factory2.newCup().drink();//MilkCup
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值