设计模式之四 抽象工厂模式
来源:互联网 发布:shell执行sql脚本 编辑:程序博客网 时间:2024/05/17 23:35
大家好,现在咱们来讨论一下抽象工厂模式吧。还是以我之前给的例子(详情可以看之前的简单工厂)但是现在要做出一点假设:
假设 苹果公司和小米公司都有生产 Phone,MP3之类的...(纯粹是为了方便说明)
好了,现在说说产品等级结构和产品族的概念
所谓的产品等级结构:就是指某一类产品的继承结构,比如说电话,它包括IPhone电话和XiaoMi电话,他们就是属于同一个产品等级结构
所谓的产品族:就是指处于不同产品等级结构的一组产品,且是由同一个工厂产生的。比如说 Apple公司既可以生产IPhone,也可以生产IPOD,而小米公司既可以生产XiaoMi手机,也可以生产XiaoMiPod(假设...)
好了,现在让我们来看看UML图吧:
现在看看代码吧
package edu.fjnu.cs.hwb.abstractfactory;public interface Phone{void call(); }
package edu.fjnu.cs.hwb.abstractfactory;public interface Pod {void play();}
package edu.fjnu.cs.hwb.abstractfactory;public interface AbstractFactory{Phone getPhone(String name);Pod getPod(String name);}
现在看看具体的实现类吧
首先是Apple公司的产品
package edu.fjnu.cs.hwb.abstractfactory;public class IPhone4 implements Phone {@Overridepublic void call(){System.out.println("this is IPhone4");}}
package edu.fjnu.cs.hwb.abstractfactory;public class IPhone4s implements Phone{@Overridepublic void call(){System.out.println("this is IPhone4s");}}
package edu.fjnu.cs.hwb.abstractfactory;public class IPod1 implements Pod {@Overridepublic void play() {System.out.println("this is IPod1");}}
package edu.fjnu.cs.hwb.abstractfactory;public class IPod2 implements Pod {@Overridepublic void play() {System.out.println("this is IPod2");}}
现在看看小米公司的:
package edu.fjnu.cs.hwb.abstractfactory; public class XiaoMi2 implements Phone{@Overridepublic void call(){System.out.println("this is XiaoMi2");}}
package edu.fjnu.cs.hwb.abstractfactory;public class XiaoMi2S implements Phone {@Overridepublic void call() {System.out.println("this is XiaoMi2S");}}
package edu.fjnu.cs.hwb.abstractfactory;public class XiaoMiPod1 implements Pod{@Overridepublic void play(){System.out.println("this is XiaoMiPod1");}}
package edu.fjnu.cs.hwb.abstractfactory;public class XiaoMiPod2 implements Pod {@Overridepublic void play() {System.out.println("this is XiaoMiPod2");}}
好了,看看对应的工厂吧。首先是苹果公司的:
package edu.fjnu.cs.hwb.abstractfactory;public class AppleFactory implements AbstractFactory {@Overridepublic Phone getPhone(String name) {if ("IPhone4".equalsIgnoreCase(name))return new IPhone4();else if ("IPhone4s".equalsIgnoreCase(name))return new IPhone4s();return null;}@Overridepublic Pod getPod(String name) {if ("IPod1".equalsIgnoreCase(name))return new IPod1();else if ("IPod2".equalsIgnoreCase(name))return new IPod2();return null;}}
之后是小米公司的:
package edu.fjnu.cs.hwb.abstractfactory;public class XiaoMiFactory implements AbstractFactory {@Overridepublic Phone getPhone(String name){if ("XiaoMi2".equalsIgnoreCase(name))return new XiaoMi2();else if ("XiaoMi2s".equalsIgnoreCase(name))return new XiaoMi2S();return null;}@Overridepublic Pod getPod(String name){if ("XiaoMiPod1".equalsIgnoreCase(name))return new XiaoMiPod1();else if ("XiaoMiPod2".equalsIgnoreCase(name))return new XiaoMiPod2();return null;}}看看客户端程序员怎么使用:
package edu.fjnu.cs.hwb.abstractfactory;public class Client {public static void main(String[] args){AbstractFactory abstractFactory = new AppleFactory();Phone phone = abstractFactory.getPhone("Iphone4");phone.call();phone = abstractFactory.getPhone("Iphone4s");phone.call();Pod pod = abstractFactory.getPod("Ipod1");pod.play();pod = abstractFactory.getPod("Ipod2");pod.play();System.out.println();abstractFactory = new XiaoMiFactory();phone = abstractFactory.getPhone("XiaoMi2");phone.call();phone = abstractFactory.getPhone("XiaoMi2s");phone.call();pod = abstractFactory.getPod("XiaoMiPod1");pod.play();pod = abstractFactory.getPod("XiaoMiPod2");pod.play();}}结果如下:
好了..代码虽然多,但是很简单的..
如果有错误,希望大家指正出来
0 0
- 设计模式之四 抽象工厂模式
- 《设计模式之禅》读书笔记(四)之抽象工厂模式
- 设计模式之(四)------抽象工厂模式
- Java设计模式之四:抽象工厂模式
- (四)Java设计模式之抽象工厂模式
- 设计模式之四:工厂模式(简单工厂、工厂方法、抽象工厂)
- 【设计模式之四:工厂模式对比】简单工厂、工厂方法和抽象工厂的区别
- 设计模式(四)-工厂模式-抽象工厂模式
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- SSH知识总结
- linux内核可以接受的参数 | Linux kernel启动参数 | 通过grub给内核传递参数
- 二维最大熵阈值分割原理与opencv实现
- [学习Cython编程]Cython编程入门
- ajax回调函数中$(this)没有作用的解决办法
- 设计模式之四 抽象工厂模式
- 复制和移动文件
- MyEclipse非常方便的快捷键
- 用命令修改ip
- vim keyboard macros
- NBNC代码行统计
- 使用Event Bus模式解耦Android App组件间通信
- Intent的用法大全
- java模仿斗地主随机洗牌 发牌,TreeMap、ArrayList、TreeSet练习