抽象工厂模式
来源:互联网 发布:dota2饰品交易淘宝 编辑:程序博客网 时间:2024/06/16 17:20
一、什么是抽象工厂模式
1.抽象工厂(Creator)角色 (FruitFactory.java) 抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
2.具体工厂( Concrete Creator)角色(WenshiFruitFactory.java, SouthFruitFactory.java, NorthFruitFactory.java) 具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
3.抽象(Product)角色 (Fruit.java) 抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
1.抽象工厂(Creator)角色 (FruitFactory.java) 抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
2.具体工厂( Concrete Creator)角色(WenshiFruitFactory.java, SouthFruitFactory.java, NorthFruitFactory.java) 具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
3.抽象(Product)角色 (Fruit.java) 抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4.具体产品(Concrete Product)角色(NorthApple.java, NorthBanana.java, WenshiBanana.java等等) 抽象模式所创建的具体实例对象
Fruit.java public interface Fruit { /* * 采集 */ public void get(); } Apple.java public abstract class Apple implements Fruit{ /* * 采集 */ public abstract void get(); } SouthApple.java public class SouthApple extends Apple { @Override public void get() { System.out.println("采集南方苹果"); } } NorthApple.java public class NorthApple extends Apple { @Override public void get() { System.out.println("采集北方苹果"); } } WenshiApple.java public class WenshiApple extends Apple { @Override public void get() { System.out.println("采集温室苹果"); } } Banana.java public abstract class Banana implements Fruit{ /* * 采集 */ public abstract void get(); } NorthBanana.java public class NorthBanana extends Banana { @Override public void get() { System.out.println("采集北方香蕉"); } } SouthBanana.java public class SouthBanana extends Banana { @Override public void get() { System.out.println("采集南方香蕉"); } } WenshiBanana.java public class WenshiBanana extends Banana { @Override public void get() { System.out.println("采集温室香蕉"); } } FruitFactory.java public interface FruitFactory { //实例化Apple public Fruit getApple(); //实例化Banana public Fruit getBanana(); } NorthFruitFactory.java public class NorthFruitFactory implements FruitFactory { public Fruit getApple() { return new NorthApple(); } public Fruit getBanana() { return new NorthBanana(); } } SouthFruitFactory.java public class SouthFruitFactory implements FruitFactory { public Fruit getApple() { return new SouthApple(); } public Fruit getBanana() { return new SouthBanana(); } } WenshiFruitFactory.java public class WenshiFruitFactory implements FruitFactory { public Fruit getApple() { return new WenshiApple(); } public Fruit getBanana() { return new WenshiBanana(); } } MainClass.java public class MainClass { public static void main(String[] args) { FruitFactory ff = new NorthFruitFactory(); Fruit apple = ff.getApple(); apple.get(); Fruit banana = ff.getBanana(); banana.get(); FruitFactory ff2= new SouthFruitFactory(); Fruit apple2 = ff2.getApple(); apple2.get(); Fruit banana2 = ff2.getBanana(); banana2.get(); FruitFactory ff3 = new WenshiFruitFactory(); Fruit apple3 = ff3.getApple(); apple3.get(); Fruit banana3 = ff3.getBanana(); banana3.get(); } }
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 2015 java 在路上
- PAT1033
- 【Jason's_ACM_解题报告】Partitioning by Palindromes
- 程序运行初期检查是否已经有一个自身的进程在运行,保证一台PC机器只运行一个程序
- UIScrollerview详解,配合UIPageControl
- 抽象工厂模式
- 【cocos2d-x-3.2】【高仿微信打飞机系列一】【开始界面 子弹生成 背景滑动 主飞机】
- 在Struts2的Action中取得请求参数值的几种方法
- 如何在CentOS 5/6上安装EPEL 源
- c++11:多线程
- Nginx+Tomcat+Memcached集群
- 链接过程分析(一)---准备素材
- PHP 配置apache基于ip的虚拟主机:
- poj 2750 线段树(带更新的环形最大子序列)