工厂模式(简单工厂、工厂方法)
来源:互联网 发布:影视制作软件app 编辑:程序博客网 时间:2024/04/30 15:45
工厂模式负责将大量有共同接口的类实例化,可以动态决定将哪个类实例化,主要有三种形态:
简单工厂模式:又称静态工厂方法模式;工厂方法模式:多态性工厂模式;抽象工厂模式:又称工具箱模式。
一、简单工厂模式
1. 工厂类角色:工厂方法模式的革新,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,往往由一个具体Java类实现。
2. 抽象产品角色:工厂方法模式所创建的对象的父类,或它们共同拥有的接口。可以用Java接口或者抽象类实现。
3. 具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品由一个具体的Java类实现。
抽象产品:
public interface Fruit { public void plant(); public void harvest();}
具体产品:
public class Apple implements Fruit { @Override public void plant() { System.out.println("apple plant"); } @Override public void harvest() { System.out.println("apple harvest"); }}
public class Grape implements Fruit { @Override public void plant() { System.out.println("grape plant"); } @Override public void harvest() { System.out.println("grape harvest"); }}
工厂类
public class FruitFactory { public static Fruit getFruit(String category){ if("apple".equals(category)){ return new Apple(); }else if("grape".equals(category)){ return new Grape(); }else{ return null; } }}
优点:模式的核心是工厂类,含有必要的逻辑判断,可以决定什么时候创建哪一个产品类的实例。而客户端免除直接创建产品对象的责任,而仅是消费产品,通过这种方式实现了责任的分割。
缺点:当产品类有复杂层级结构时,扩展起来比较麻烦。
二、工厂方法模式
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建对象工作推迟到子类中。
1. 抽象工厂角色:工厂方法模式的核心,任何工厂类必须实现这个接口。这个角色常常使用抽象Java类实现。
2. 具体工厂角色:实现抽象工厂接口的具体Java类,含有密切相关的逻辑,受到 应用程序的调用以创建产品对象。具体的Java类实现。
3. 抽象产品角色:工厂方法模式所创建的对象的父类,或它们共同拥有的接口。可以用Java接口或者抽象类实现。
4. 具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品由一个具体的Java类实现。
抽象工厂
public interface FruitGardener { public Fruit factory();}
具体工厂
public class AppleGardener implements FruitGardener{ @Override public Fruit factory() { return new Apple(); }}public class GrapeGardener implements FruitGardener { @Override public Fruit factory() { return new Grape(); }}
抽象产品:
public interface Fruit { public void plant(); public void harvest();}
具体产品:
public class Apple implements Fruit { @Override public void plant() { System.out.println("apple plant"); } @Override public void harvest() { System.out.println("apple harvest"); }}
public class Grape implements Fruit { @Override public void plant() { System.out.println("grape plant"); } @Override public void harvest() { System.out.println("grape harvest"); }}
优点:允许客户端相对独立于产品创建的过程,并且在系统引入新产品的时候无需修改客户端。
缺点:如果有新的产品加到系统中,需要修改工厂类,将必要逻辑加入到工厂类中。
- 工厂模式(简单工厂、工厂方法)
- 工厂模式(简单工厂,工厂方法,抽象工厂)
- 工厂模式(简单工厂+工厂方法+抽象工厂)
- 工厂模式(简单工厂、工厂方法、抽象工厂)
- 工厂模式(简单工厂、工厂方法、抽象工厂)
- 工厂模式详解(简单工厂+工厂方法+抽象工厂)
- 工厂模式详解(简单工厂+工厂方法+抽象工厂)
- Java工厂模式(简单工厂、工厂方法、抽象工厂)
- 工厂模式(简单工厂,工厂方法,抽象工厂)
- 工厂模式(简单工厂+工厂方法+抽象工厂)
- 工厂模式(简单工厂模式、工厂方法模式)
- 设计模式 - 工厂模式(简单,工厂方法,抽象工厂)
- Java设计模式--工厂模式(简单工厂+工厂方法)
- Java设计模式-工厂模式(简单工厂+工厂方法)
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂|工厂方法|抽象工厂模式
- [设计模式](二):工厂模式(简单工厂|静态工程、工厂方法|多工厂、抽象工厂)
- ES6之箭头函数使用
- python实现简单的图像对比
- 关于在android studio的版本控制git和github
- 吴超Hadoop7天视频教程
- MPAndroidChart学习笔记----LineChart
- 工厂模式(简单工厂、工厂方法)
- 线程网络的分配
- 国嵌嵌入式开发板学习笔记-外设的使用
- Linux history命令使用
- Arcgis Server通过发布GP服务实现等值线(实践经验)
- Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
- 跨域的一个简单方案
- 数据库三大范式
- cpp——复合类型——函数——函数重载