java设计模式--工厂方法模式
来源:互联网 发布:实名认证数据网 编辑:程序博客网 时间:2024/06/07 03:08
工厂模式是java比较重要的模式之一,工厂模式又可以分为简单工厂模式、工厂方法模式和抽象工厂模式,在有些书中也把简单工厂模式归类为工厂方法模式。下面我通过我
的学习来对他们进行一个总结。
1. 简单工厂模式
简单工厂模式有三种角色组成:
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
1) 定义一个抽象类产品
public interface Car{ public void drive(); }2) 定义二个具体类产品,继承了抽象类产品
public class DaZong implements Car{
public void drive() {
System.out.println("Driving DaZong ");
}
}
public class Bmw implements Car{
public void drive() {
System.out.println("Driving Bmw ");
}
}
public class DriverFactory{
public static Car driverCar(String s) throws Exception {
//判断逻辑,返回具体的产品角色给Client
if(s.equalsIgnoreCase("DaZong "))
return new DaZong ();
else if(s.equalsIgnoreCase("Bmw"))
return new Bmw();
}}
4)客户端代码
public class Driver{
public static void main(String[] args){
try{
Car car = DriverFactory.driverCar("DaZong"); //调用工厂类
//下命令:开车
car.drive(); }}
上面就是简单工厂模式的一个示例,我们定义一个抽象产品接口,并定义了两个具体产品类,定义了一个工厂类,工厂类是通过传的不同的参数来实例化不同的对象,所以就会有一个问题,不能扩展,每次扩展都得去修改工厂类,这样就违反了开闭原则(对扩展开放,对修改关闭)。所以简单工厂模式适合比较简单的情况,对于复杂的情况是不适合的。
2. 工厂方法模式
工厂方法模式的四种角色:
抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
从上面的四个角色可以推断,工厂方法模式在简单工厂模式的基础上进行了又一次抽象,多了一个具体工厂模式,这说明工厂方法模式中,为每一个具体产品提供一个工厂类,这样我们就可以进行产品的扩展。下面通过实例类看一下:
1)定义抽象产品角色
public interface Flying{
void fly();
}
2)定义两个具体产品角色
public class AirPlane implements Flying{
@Override
public void fly() {
System.out.println("airplane....");
}
}
public class Rocket implements Flying{
@Override
public void fly() {
System.out.println("rocket.....");
}
}
3)定义抽象工厂
public abstract class WineFactory {
abstract Flying create();
}
4)为每个具体产品定义各自的工厂类
public class AirPlaneFactory extends WineFactory{
public Flying create() {
return new AirPlane();
}
}
public Flying create() {
return new Rocket();
}
}
5)测试类
public class Test {
public static void main(String[] args) {
WineFactory airfactory = new AirPlaneFactory();
Flying f = airfactory.create();
f.fly();
}
}
从上面的代码实例可以清楚的看到,工厂方法模式为每个具体产品提供了一个对应的工厂类,这样就可以对产品进行扩展啦。
- java设计模式--工厂方法设计模式
- Java工厂方法模式设计
- Java工厂方法模式设计
- java工厂方法设计模式
- java设计模式-工厂方法
- JAVA-工厂方法设计模式
- 【java】工厂方法设计模式
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- java设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- Java设计模式--工厂模式(简单工厂+工厂方法)
- Java设计模式-工厂模式(简单工厂+工厂方法)
- Day006:Linked List Cycle II
- openwrt创建子端口
- c#mvc redirecttoaction 和redirect的区别
- ABIX.v6.69.01.Bilanguage.WinAll-LAXiTY\
- mysql-常用分析工具
- java设计模式--工厂方法模式
- java将阿拉伯数字转换为中文数字
- css元素分类
- Android中Toolbar (2)
- 个人收集的实用工具类
- Tomcat解决中文乱码
- Linux配置apache+php+mysql
- ros_arduino_bridge的安装及使用
- python3.x 画图二维