设计模式之建造型-抽象工厂模式(3)

定义:为创建一组相关或者相互依赖的对象提供一个接口,而无需指定它们的具体类。

抽象工厂的定义很抽象,下面我们贴出抽象工厂的UML图

这里写图片描述



在抽象工厂中有如下角色

AbstractFactory:抽象工厂,用来创建不同的产品

ConcreatFactory:具体工厂,实现抽象工厂创建产品的方法

AbstractProduct:抽象产品,用于声明每个产品的抽象方法

ConcreatProduct :具体产品,实现抽象产品的方法,生成具体的产品

下面我们还是举之前电脑的例子来用代码实现抽象工厂模式,假设现在的产品不仅仅有电话,还有pad ,相应的工厂中不仅仅生成电话,还生产平板,相应的,平板也具备打电话的功能。

定义产品接口 pad和phone

public interface Pad {
     void  call();
}

public interface Phone {
     void call();
}

定义工厂接口

public interface IFactory {
     Phone  creatPhone();
     Pad    creatPad();
}

定义华为的pad和phone实现类

public class Huaweipad implements Pad {
    @Override
    public void call() {
        Log.i("tag:","小米平板打电话");
    }
}

public class HuaWeiPhone implements Phone {
    @Override
    public void call() {
        Log.i("tag","小米手机打电话");
    }
}

定于小米的pad 和phone实现类

public class XiaoMipad implements Pad {
    @Override
    public void call() {
        Log.i("tag:","华为平板打电话");
    }
}

public class XiaoMiPhone implements Phone {
    @Override
    public void call() {
        Log.i("tag","华为手机打电话");
    }
}

然后实现工厂接口,生成各自的产品

public class HuaweiFactory implements IFactory {
    @Override
    public Phone creatPhone() {
        return new HuaWeiPhone();

    }

    @Override
    public Pad creatPad() {
        return new Huaweipad();
    }
}

public class XiaoMiFactory implements IFactory {
    @Override
    public Phone creatPhone() {
        return new XiaoMiPhone();

    }

    @Override
    public Pad creatPad() {
        return new  XiaoMipad();
    }
}

最后测试类

public class Test {
    public static void main(String[] args) {
        IFactory factory=new HuaweiFactory();
        factory.creatPhone().call();
        factory.creatPad().call();
        factory=new XiaoMiFactory();
        factory.creatPhone().call();
        factory.creatPad().call();


    }
}
可以看出,客户端只是创建的工厂类不同,产生了不一样的结果,对比工厂相关的3种模式:

1,首先从简单工厂进化到工厂方法,是因为工厂方法弥补了简单工厂对修改开放的弊端,即简单工厂违背了开闭原则。

2,从工厂方法进化到抽象工厂,是因为抽象工厂弥补了工厂方法只能创造一个系列的产品的弊端。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值