文档章节

设计模式:抽象工厂模式

大羌
 大羌
发布于 2017/09/10 23:16
字数 556
阅读 2
收藏 0

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

工厂的最终定义是:客户提出需求,工厂满足需求,客户不需要知道你到底是怎么是实现的,给结果就行;

工厂方法模式在一般情况下只是会产生一个factory,因为在他的范畴内,产品类基本上只会出现一种差异(或者说是方法,特性差异并不多),东南亚分为:Malaysia,Thailand,Singepore;但是其中并没有考虑到其中各个国家内部之间还有差异;比如Malaysia;内部语言可能会有马语,和英语,在工厂方法模式中并不能很好的做出处理;那么抽象工厂模式就能够对他做出处理;

以上面国家为例写个demo:

A:抽象的产品类:

public interface Country {
    public String countryName();
}
public abstract class AbstractCountry implements Country {
    public abstract  void useLanguage();
}

B:以马来西亚为例:

(1)使用英语的马来西亚人:

public class MalaysiaInEnglish extends AbstractCountry {
    @Override
    public void useLanguage() {
        System.out.println("use english!");
    }
    @Override
    public String countryName() {
        return "Malaysia";
    }
}

(2)使用马来语的马来西亚人:

public class MalaysiaInMaYu extends AbstractCountry {
    @Override
    public void useLanguage() {
        System.out.println("use Mayu!");
    }
    @Override
    public String countryName() {
        return "Malaysia";
    }
}

C:抽象的创造类,用于创造对象:

public abstract class AbstractCreator {

    public abstract AbstractCountry createMalaysia();
}

(1)生产说英语的马来西亚

public class EnglishMalaysiaCreator extends  AbstractCreator {
    @Override
    public AbstractCountry createMalaysia() {
        return new MalaysiaInEnglish();
    }
}

(2)生产说马语的马来西亚

public class MayuMalaysiaCreator extends  AbstractCreator {
    @Override
    public AbstractCountry createMalaysia() {
        return new MalaysiaInMaYu();
    }
}

D:实现测试:

public class PatternRealize {
    public static void main(String[] args) {
        AbstractCreator c1= new EnglishMalaysiaCreator();
        AbstractCreator c2 = new MayuMalaysiaCreator();

        MalaysiaInEnglish english  = (MalaysiaInEnglish) c1.createMalaysia();
        MalaysiaInMaYu mayu = (MalaysiaInMaYu) c2.createMalaysia();
    }
}

以上就是抽象工厂模式的实现;

优点:

封装性:只需要提需求,怎么出现的不管;

产品族内的约束为非公开状态:比如人的说英语和马语的人数分配;不公开,内部自己就定义好了;(其实也是因为封装的缘故);

缺点:

抽象类比较多,当增加产品族的时候,需要多一个create;而且要改抽象接口里面的代码不太符合设计模式中的开闭原则;

© 著作权归作者所有

共有 人打赏支持
大羌
粉丝 0
博文 30
码字总数 13488
作品 0
成都
程序员

暂无文章

jetbrains系产品IDEA:mac上面提示快捷键设置

原因 由于Mac上面的Ctrl+空格变成输入法切换的快捷键,在使用IDEA的过程中,代码提示很不方便,需要使用option+/这种传统eclipse上面的代码提示快捷键作为主要快捷键。 怎么修改? 移除【opt...

亚林瓜子
33分钟前
0
0
Exclipse 输出结果时换行

System.out.println(f1 + "\n" + d1 + "\n" + d2);

笑丶笑
33分钟前
1
0
怎样治疗标签不能触发onblur事件

I realize this was over a year ago, but it showed up for me in Google while trying to solve this same issue. It seems Chrome does not consider some elements, like body and ancho......

Weijuer
36分钟前
0
0
vue常见库安装

移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击。为了能够立即响应用户的点击事件,才有了FastClick。 安装fastclick npm insta...

林夏夕
38分钟前
0
0
kafka 教程(三) kafka Java API 编程

下午写

MrPei
39分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部