工厂模式(三)--抽象工厂模式
2016-05-19 19:41
459 查看
抽象工厂模式:当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。
抽象工厂模式与工厂方法模式的区别:
工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。
类图:
场景:现在有2个产品,手机(Phone)和平板(Pad),我们需要一个工厂(IFactory)生产2中产品,现在有2个品牌小米,苹果都做这产品,并且有着自己的工厂。
代码:
产品的基类与实现的接口
抽象工厂:
小米产品:
小米的工厂:
苹果的产品
苹果的工厂:
程序入口:
抽象工厂模式与工厂方法模式的区别:
工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。
类图:
场景:现在有2个产品,手机(Phone)和平板(Pad),我们需要一个工厂(IFactory)生产2中产品,现在有2个品牌小米,苹果都做这产品,并且有着自己的工厂。
代码:
产品的基类与实现的接口
public interface ICall { void call(); } public abstract class Phone implements ICall { } public interface IPlay { void play(); } public abstract class Pad implements IPlay { }
抽象工厂:
public interface IFactory { Phone createPhone(); Pad createPad(); }
小米产品:
public class XiaoMiPhone extends Phone { @Override public void call() { Log.e("zhang", "用小米手机打电话" ); } } public class XiaoMiPad extends Pad { @Override public void play() { Log.e("zhang", "用小米平板玩游戏" ); } }
小米的工厂:
public class XiaoMiFactory implements IFactory { @Override public Phone createPhone() { return new XiaoMiPhone(); } @Override public Pad createPad() { return new XiaoMiPad(); } }
苹果的产品
public class IPhone extends Phone { @Override public void call() { Log.e("zhang", "用iPhone打电话" ); } } public class IPad extends Pad { @Override public void play() { Log.e("zhang", "用iPad玩游戏" ); } }
苹果的工厂:
public class AppleFactory implements IFactory { @Override public Phone createPhone() { return new IPhone(); } @Override public Pad createPad() { return new IPad(); } }
程序入口:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IFactory factory = new XiaoMiFactory(); operate(factory); factory = new AppleFactory(); operate(factory); } public void operate(IFactory factory) { Phone phone = factory.createPhone(); phone.call(); Pad pad = factory.createPad(); pad.play(); } }
相关文章推荐
- 字符串函数
- #pragma pack(push,1)与#pragma pack(1)的区别
- npm 使用代理
- Python和shell中Base64编码使用那些事
- OSX PHP添加intl支持
- 学习总结:Activity生命周期
- log4j系列一:log4j简介以及Loggers
- cas4.2.1 帐号密码
- POJ_2104_Kth_(主席树)
- UI进阶 即时通讯之XMPP环境搭建
- Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
- Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
- Python和shell中Base64编码使用那些事
- 网络信息安全攻防实验室 第四关
- yii
- 《学习笔记》之JAVA设计模式--抽象工厂模式
- 解决虚拟机上的tomcat无法被主机访问的问题
- Android探索之AIDL实现进程间通信
- 实验室实验备忘
- 解决OSX上面PHP curl SSLRead() error