"抽象工厂模式"-之Java,Android面试必问设计模式(2/9)
来源:互联网 发布:unity3d游戏案例教程 编辑:程序博客网 时间:2024/06/05 06:40
介绍
这是我给大家介绍的8个面试必问的设计模式的第二类:抽象工厂模式.学完这8类必会的那么面试就不会有什么问题了,其余的无非都是多态的演变.好的开始讲解第二类:
大家可以发现,前面我给大家已经讲过了”工厂模式”,那么现在这篇文章是”抽象工厂模式”,这两个模式的有什么区别呢,下面我就给大家总结出他们的区别和特点
“抽象”工厂方法模式和普通工厂方法的不同:
- 1.”每个具体实例”的背后都有一个工厂类.
- 2.有各个工厂类统一的”接口”
存在的原因:
- 由于普通工厂模式,要”拓展功能”的时候,需要对”工厂类”进行修改
(例子:比如现在又来了个发送彩信的方法,普通方法:必须修改工厂类方法,添加一个方法,并new,不符合开闭原则
解决方法:
- 建造多个工厂类
(例如,短信类创建一个短信工厂类,邮箱也是如此,工厂类都实现同一个接口,为了等下统一执行工厂类的方法,这样以后添加发送XXX的功能,只需要建立这个类和工厂类即可)
代码
/** * 抽象工厂方法: * 1.各个类对应有各自的工厂类 * 2.各个工厂类实现同一个接口,因为加了功能类,加了工厂类,接口就一个,等下只要指向不同对象即可. * 3.最后只需要创建接口的实例即可 * 4.后续添加功能,那么只需(添加一个类+对应的工厂类即可) *///给工厂类的接口interface Provid { public Send provid();}//发送接口interface Send { public void send();}//发送短信类,实现发送类class SendMessage implements Send { @Override public void send() { System.out.println("发送了 短信..."); }}//发送邮件类,实现发送类class SendEmail implements Send { @Override public void send() { System.out.println("发送了 邮件..."); }}//发送信息工厂类,实现拓展接口class SendMessageFactory implements Provid{ @Override public Send provid() { //返回对应的类 return new SendMessage(); }}//发送邮件工厂类,实现拓展接口class SendEmailFactory implements Provid{ @Override public Send provid() { //返回对应的类 return new SendEmail(); }}class Test { public static void main(String[] args) { //实现工厂接口的具体实例 Provid semail = new SendEmailFactory(); //实现发送的具体实例 Send smail = semail.provid(); //调用接口存在的方法即可. smail.send(); }}
打印结果:
发送了 邮件...
0 0
- "抽象工厂模式"-之Java,Android面试必问设计模式(2/9)
- "工厂模式"-之Java,Android面试必问设计模式(1/9)
- "享元模式"-之Java,Android面试必问设计模式(9/9)
- "单例模式"-之Java,Android面试必问设计模式(3/9)
- "建造者模式"-之Java,Android面试必问设计模式(4/9)
- "适配器模式"-之Java,Android面试必问设计模式(5/9)
- "装饰模式"-之Java,Android面试必问设计模式(6/9)
- "策略模式"-之Java,Android面试必问设计模式(7/9)
- "观察者模式"-之Java,Android面试必问设计模式(8/9)
- android设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- 【Java设计模式】之抽象工厂模式
- java设计模式 之 抽象工厂模式
- Java--设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- UDP广播与多播
- 使用github托管项目
- mysql主键外键
- 安卓圆角按钮,最详细教程,图+文+代码
- Eclipse在线安装fatjar插件
- "抽象工厂模式"-之Java,Android面试必问设计模式(2/9)
- 自制虚拟机系列第一部分:构思及汇编器
- Masonry基本用法
- Navicat Premium 中有哪些工具比较实用
- 使用Gradle构建多个不同applicationId包
- SQLServer 断开数据库连接
- 修改pip的源
- 如何解决android模拟器DPAD not enabled in AVD
- git编辑github上代码讲解