抽象工厂模式-Abstract Factory Pattern

来源:互联网 发布:单点登录系统源码 编辑:程序博客网 时间:2024/06/06 01:27

基本概念

抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

结构图


上图摘自《大话设计模式》

应用场景

一个系统的产品有多于一个的产品族,同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来,系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。

源码示例

1.创建电脑产品接口

package com.spook.abstractfactory;/** * 电脑产品接口 */public interface Computer {public void produce();}
2.创建一个具体电脑实现类

package com.spook.abstractfactory;/** * 模拟具体电脑产品类 */public class MacBookAir implements Computer {@Overridepublic void produce() {// TODO Auto-generated method stubSystem.out.println("MacBookAir电脑");}}
3.创建另一个电脑实现类

package com.spook.abstractfactory;/** * 模拟具体电脑产品类 */public class MacBookPro implements Computer {@Overridepublic void produce() {// TODO Auto-generated method stubSystem.out.println("MacBookPro电脑");}}

4.创建手机产品接口

package com.spook.abstractfactory;/** * 手机产品接口 */public interface MobilePhone {public void produce();}
5.创建一个手机实现类

package com.spook.abstractfactory;/** * 模拟具体手机产品类 */public class IPhone6 implements MobilePhone{@Overridepublic void produce() {// TODO Auto-generated method stubSystem.out.println("iPhone6 手机");}}
6.创建另一个手机实现类

package com.spook.abstractfactory;/** * 模拟具体手机产品类 */public class IPhone6plus implements MobilePhone {@Overridepublic void produce() {// TODO Auto-generated method stubSystem.out.println("iPhone6 Plus手机");}}
7.创建一个工厂接口

package com.spook.abstractfactory;/** * 模拟苹果公司生产工厂,假定有两种产品:电脑和手机 */public interface AppleFactory {public Computer createComputer();public MobilePhone createPhone();}
8.创建台电工厂,实现工厂接口

package com.spook.abstractfactory;/** * 台电工厂,假定能够生产MacBookAir电脑和iPhone6 */public class TeclastFactory implements AppleFactory {@Overridepublic Computer createComputer() {// TODO Auto-generated method stubreturn new MacBookAir();}@Overridepublic MobilePhone createPhone() {// TODO Auto-generated method stubreturn new IPhone6();}}
9.创建富士康工厂,实现工厂接口

package com.spook.abstractfactory;/** * 富士康工厂,假定能够生产MacBookPro电脑和iPhone6 plus */public class FoxconnFactory implements AppleFactory {@Overridepublic Computer createComputer() {// TODO Auto-generated method stubreturn new MacBookPro();}@Overridepublic MobilePhone createPhone() {// TODO Auto-generated method stubreturn new IPhone6plus();}}
10.测试类

package com.spook.abstractfactory;/** * 测试类 */public class Test {public static void main(String[] args) {// TODO Auto-generated method stubAppleFactory teclastFactory = new TeclastFactory();System.out.println("台电工厂生产的产品如下:");Computer computer = teclastFactory.createComputer();computer.produce();MobilePhone phone = teclastFactory.createPhone();phone.produce();AppleFactory foxcoonFactory = new FoxconnFactory();System.out.println("------------------");System.out.println("富士康工厂生产的产品如下:");computer = foxcoonFactory.createComputer();computer.produce();phone = foxcoonFactory.createPhone();phone.produce();}}
运行测试类输出如下内容:

台电工厂生产的产品如下:MacBookAir电脑iPhone6 手机------------------富士康工厂生产的产品如下:MacBookPro电脑iPhone6 Plus手机


0 0
原创粉丝点击