设计模式-创建型-抽象工厂模式(Abstract Factory)

来源:互联网 发布:warframe重置端口 编辑:程序博客网 时间:2024/05/21 10:14

定义

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

角色

抽象工厂角色(Creator):抽象工厂角色是工厂方法模式的核心,与调用者直接交互用来提供产品。

具体工厂角色(Concrete Creator):这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。

抽象产品角色(Product):工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。定义产品的规范,所有的产品实现都必须遵循产品接口定义的规范。

具体产品角色(Concrete Product):这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

类图

AbstractFactory

package com.vapy.creator.AbstractFactory;/** *  * @author vapy * */public interface Phone {    public void show();}
package com.vapy.creator.AbstractFactory;/** *  * @author vapy * */public interface IPhone extends Phone {    public void show();}
package com.vapy.creator.AbstractFactory;/** *  * @author vapy * */public class Iphone7 implements IPhone {    @Override    public void show() {        System.out.println("this is iphone7");    }}
package com.vapy.creator.AbstractFactory;/** *  * @author vapy * */public interface Samsung extends Phone {    public void show();}
package com.vapy.creator.AbstractFactory;/** *  * @author vapy * */public class SamsungS6 implements Samsung {    @Override    public void show() {        System.out.println("this is Samsung s6");    }}
package com.vapy.creator.AbstractFactory;/** *  * @author vapy * */public interface IFactory {    public Phone createIPhone();    public Phone createSamsung();}
package com.vapy.creator.AbstractFactory;/** *  * @author vapy * */public class Factory implements IFactory {    @Override    public IPhone createIPhone() {        return new Iphone7();    }    @Override    public Samsung createSamsung() {        return new SamsungS6();    }}
package com.vapy.creator.AbstractFactory;/** *  * @author vapy * */public class Client {    public static void main(String[] args) {        IFactory factory = new Factory();        factory.createIPhone().show();        factory.createSamsung().show();    }}

总结

       简单工厂模式、工厂方法模式、抽象工厂模式都属于工厂模式,形式上也很相似,工厂方法模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的,但他们的目的是一样的,那就是解耦。个人认为在使用时不用太在意具体是哪个工厂模式,而应关注是否达到解耦的目的。

抽象工厂模式结果
本文代码可在github查看:点击此处

5 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 荣耀8开不了机怎么办 华为5s死机了怎么办 华为重启后忘了解锁密码怎么办 华为mate.9上网速度慢怎么办 华为mate10上网速度慢怎么办 四核豌豆2变砖怎么办 苹果32g不够用怎么办 移动4g网络卡怎么办 移动4g网非常卡怎么办 移动4g卡网速慢怎么办 手机移动4g网卡怎么办 华为手机摄像头进灰怎么办 美图t8忘记密码怎么办 华为mate7忘记开机密码怎么办 华为mate9开机密码忘记怎么办 华为手机系统更新失败怎么办 mate9系统升级后耗电快怎么办 华为荣耀手机耗电快怎么办 荣耀10手机拍照不清晰怎么办 荣耀6x拍照模糊怎么办 华为荣耀P9进水了怎么办 苹果5s手机信号不好怎么办 苹果5s信号不好怎么办? 苹果5s像素不好怎么办 华为mate边缘有缝怎么办 华为mate8边缘有缝怎么办 手机系统占用运行内存大怎么办 安卓手机储存空间不足怎么办 手机显示系统空间不足怎么办 联系人存储已停止运行怎么办 荣耀note8听筒声音小怎么办 红米4x内存不足怎么办 安卓电视内存小怎么办 红米手机运行内存不足怎么办 红米手机存储空间不足怎么办 华为手机储存空间不足怎么办 大麦机顶盒遥控器丢了怎么办 大麦盒子总自动加软件怎么办 小米手机玩王者荣耀卡怎么办 荣耀8青春版信号差怎么办 华为mate8电池不耐用怎么办