请各们前辈指点,本人初学者。
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
现在有一水果接口:Fruit
/**
* Fruit接口
* 2010-6-26 下午09:50:57
*/
public interface Fruit {
/**
* 摘取
*/
public void get();
}
目前有两种水果的结构,分别是苹果和香蕉,由于苹果和香蕉的产地不同或者种法不同,又进行了分类,比如说苹果依据产地分为北方苹果和南方苹果,香蕉也是如此分类,因此,Apple类和Banana类的get方法不能具体实现,只定义,具体的实现由其子类实现,代码如下:
/**
* 苹果类
* 2010-6-26 下午09:45:41
*/
public abstract class Apple implements Fruit{
/**
* 采集苹果
* 2010-6-26 下午09:46:20
*/
public abstract void get();
}
/**
* 香蕉类
* 2010-6-26 下午09:46:59
*/
public abstract class Banana implements Fruit{
/**
* 采集
* 2010-6-26 下午09:47:16
*/
public abstract void get();
}
如上所说,现在由于产地不同进行了分类,分为南方和北方的苹果和香蕉,代码如下:
/**
* 北方苹果
* 2010-7-5 下午09:43:36
*/
public class NorthApple extends Apple {
/* (non-Javadoc)
* @see Apple#get()
*/
@Override
public void get() {
System.out.println(" 采集北方苹果");
}
}
/**
* 北方香蕉
* 2010-7-5 下午09:45:09
*/
public class NorthBanana extends Banana {
/* (non-Javadoc)
* @see Banana#get()
*/
@Override
public void get() {
System.out.println("采集北方香蕉");
}
}
/**
* 南方苹果
* 2010-7-5 下午09:44:08
*/
public class SouthApple extends Apple {
/* (non-Javadoc)
* @see Apple#get()
*/
@Override
public void get() {
System.out.println("采集南方苹果");
}
}
/**
* 南方香蕉
* 2010-7-5 下午09:45:34
*/
public class SouthBanan extends Banana {
/* (non-Javadoc)
* @see Banana#get()
*/
@Override
public void get() {
System.out.println("采集南方苹果");
}
}
由于水果根据产地进行了分类,那么产生水果的工厂也要根据产地进行生产,那么FruitFactory接口只负责水果结构(如产生一个苹果和一个香蕉,但不分产地,具体实现由子类)的产生,代码如下:
/**
* 水果工厂接口
* 2010-6-26 下午09:53:48
*/
public interface FruitFactory {
/**
* 实例化Apple
* 2010-7-5 下午09:49:51
*/
public Fruit getApple();
/**
* 实例化Banana
* 2010-7-5 下午09:50:18
*/
public Fruit getBanana();
}
由于水果进行了产地的区分,因此我们分别建立NorthFruitFacotry和SouthFruitFactory分别生产北方水果和南方水果,代码如下:
/**
* 北方水果生产工厂
* 2010-7-5 下午09:51:25
*/
public class NorthFuritFactory implements FruitFactory {
/* (non-Javadoc)
* @see FruitFactory#getApple()
*/
@Override
public Fruit getApple() {
return new NorthApple();
}
/* (non-Javadoc)
* @see FruitFactory#getBanana()
*/
@Override
public Fruit getBanana() {
return new NorthBanana();
}
}
/**
* 南方水果生产工厂
* 2010-7-5 下午09:53:23
*/
public class SouthFruitFacotry implements FruitFactory {
/* (non-Javadoc)
* @see FruitFactory#getApple()
*/
@Override
public Fruit getApple() {
return new SouthApple();
}
/* (non-Javadoc)
* @see FruitFactory#getBanana()
*/
@Override
public Fruit getBanana() {
return new SouthBanan();
}
}
优点:当我们增加产品族,例如我们增加一个温室苹果和香蕉时,我们只需扩展一个温室苹果类(WenShiApple)和温室香蕉类(WenShiBanana)即可,代码如下:
/**
* 温室苹果
* 2010-7-5 下午09:58:11
*/
public class WenShiApple extends Apple {
/* (non-Javadoc)
* @see Apple#get()
*/
@Override
public void get() {
System.out.println("采集温室苹果");
}
}
/**
* 温室香蕉
* 2010-7-5 下午09:58:38
*/
public class WenShiBanana extends Banana {
/* (non-Javadoc)
* @see Banana#get()
*/
@Override
public void get() {
System.out.println("采集温室香蕉");
}
}
之后,我们建立一个专门生产温室水果的工厂类,代码如下:
/**
* 温室水果生产工厂类
* 2010-7-5 下午09:59:47
*/
public class WenShiFruitFactory implements FruitFactory {
/* (non-Javadoc)
* @see FruitFactory#getApple()
*/
@Override
public Fruit getApple() {
return new WenShiApple();
}
/* (non-Javadoc)
* @see FruitFactory#getBanana()
*/
@Override
public Fruit getBanana() {
return new WenShiBanana();
}
}
到此,我们增加一个新的水果族:温室水果,这样的扩展是符合OCP原则的。
但是,如果我们增加一个新的水果结构的话,就不符合了,例如增加一个水果结构:西瓜,这个是抽象工厂的缺点。
分享到:
相关推荐
java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式
SETema5 软件设计模式——抽象工厂
Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...
JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对...
3.3AbstractFactoryPattern(抽象工厂模式) 45 3.3.1定义 45 3.3.2现实例子——扩展了的兵工厂 48 3.3.3C#实例——大陆生态系统 49 3.3.4Java实例——电脑产品 52 3.3.5优势和缺陷 57 3.3.6应用情景 57 3.4...
3.3AbstractFactoryPattern(抽象工厂模式) 45 3.3.1定义 45 3.3.2现实例子——扩展了的兵工厂 48 3.3.3C#实例——大陆生态系统 49 3.3.4Java实例——电脑产品 52 3.3.5优势和缺陷 57 3.3.6应用情景 57 3.4...
基础知识 基础知识设计模式概述 从招式与内功谈起——设计模式概述(一) 从招式与内功谈起——设计模式概述(二) 从招式与内功谈起——设计模式概述(三) 面向对象设计原则 面向对象设计原则之单一职责原则 面向...
先来看看,简单工厂模式——也叫静态工厂模式,这里举个例子:你要去买一台手机,你不用关心手机是怎么生产出来的,里面的零件具体又是怎么制造的,这些通通都交给工厂去处理,你尽管去买手机就好了。 简单工厂模式...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 ...
pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 ...
抽象工厂模式 工厂方法模式 建造这模式 原型模式 单例模式 行为模式 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 ...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...