java设计模式_抽象工厂模式
2016-07-24 10:52
281 查看
一、什么是抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽 象和最其一般性的。抽象工厂模式可以向客户端 提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对 象。
二、产品族和产品等级结构
三、模式中包含的角色及其职责
1.抽象工厂(Creator)角色抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。2.具体工厂( Concrete Creator)角色具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
3.抽象(Product)角色抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4.具体产品(Concrete Product)角色抽象模式所创建的具体实例对象 总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。
//示例1: public interface Fruit { /** * 采集 */ public void get(); } public abstract class Apple implements Fruit { /* * 采集 */ public abstract void get(); } public class NorthApple extends Apple { /* * 采集 */ @Override public void get() { System.out.println("采集北方的平果"); } } public class SouthApple extends Apple { /* * 采集 */ @Override public void get() { System.out.println("采集南方的平果"); } } public abstract class Banana implements Fruit { /* * 采集 */ public abstract void get(); } public class NorthBanana implements Fruit { /* * 采集 */ public void get(){ System.out.println("采集北方的香焦"); } } public class SouthBanana implements Fruit { /* * 采集 */ public void get(){ System.out.println("采集南方的香焦"); } } public interface FruitFactory { //实例化Apple public Fruit getApple(); //实例化Banana public Fruit getBanana(); } public class NorthFruitFactory implements FruitFactory { @Override public Fruit getApple() { return new NorthApple(); } @Override public Fruit getBanana() { return new NorthBanana(); } } public class SouthFruitFactory implements FruitFactory { @Override public Fruit getApple() { return new SouthApple(); } @Override public Fruit getBanana() { return new SouthBanana(); } } public class MainClass { public static void main(String[] args) throws Exception { FruitFactory northFruitFactory = new NorthFruitFactory(); Fruit northApple = northFruitFactory.getApple(); northApple.get(); Fruit northBanana = northFruitFactory.getBanana(); northBanana.get(); FruitFactory southFruitFactory = new SouthFruitFactory(); Fruit southApple = southFruitFactory.getApple(); southApple.get(); Fruit southBanana = southFruitFactory.getBanana(); southBanana.get(); } } //采集北方的苹果 //采集北方的香焦 //采集南方的苹果 //采集南方的香焦 //*现在考虑增加一个温室类型水果 public class WenshiApple extends Apple { @Override public void get() { System.out.println("采集温室苹果"); } } public class WenshiBanana extends Banana { @Override public void get() { System.out.println("采集温室香焦"); } } public class WenshiFruitFactory implements FruitFactory { @Override public Fruit getApple() { return new WenshiApple(); } @Override public Fruit getBanana() { return new WenshiBanana(); } } public class MainClass { public static void main(String[] args) throws Exception { FruitFactory northFruitFactory = new NorthFruitFactory(); Fruit northApple = northFruitFactory.getApple(); northApple.get(); Fruit northBanana = northFruitFactory.getBanana(); northBanana.get(); FruitFactory southFruitFactory = new SouthFruitFactory(); Fruit southApple = southFruitFactory.getApple(); southApple.get(); Fruit southBanana = southFruitFactory.getBanana(); southBanana.get(); FruitFactory wenshiFruitFactory = new WenshiFruitFactory(); Fruit wenshiFruit = wenshiFruitFactory.getApple(); wenshiFruit.get(); Fruit wenshiBanana = wenshiFruitFactory.getBanana(); wenshiBanana.get(); } } //采集北方的苹果 //采集北方的香焦 //采集南方的苹果 //采集南方的香焦 //采集温室苹果 //采集温室香焦
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树