本篇文章主要介绍了"Java设计模式-工厂方法模式和抽象工厂模式",主要涉及到java设计模式,抽象工厂模式方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
工厂方法模式定义:即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)。“一对一”的关系1,一抽象工厂类派生出多个具...
工厂方法模式定义:
即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)。“一对一”的关系
1,一抽象工厂类派生出多个具体工厂类;
2,一抽象产品类派生出多个具体产品类;
3,每个具体工厂类只能创建一个具体产品类的实例。
UML图:

角色模块:
1,抽象工厂类:工厂方法模式的核心,定义一个创建对象的接口
2,具体工厂类:继承抽象工厂类,实现其工厂方法,实现具体业务逻辑
3,抽象产品类:是工厂方法模式所创建的产品的父类
4,具体产品类:实现抽象产品类的某个具体产品的对象。
工厂方法模式的代码模板:
Product.java
package com.hust.factory1;
//抽象产品类
public abstract class Product {
//产品类的抽象方法,有具体的产品类去实现
public abstract void method();
}
ConcreteProductA.javapackage com.hust.factory1;
//具体产品类A
public class ConcreteProductA extends Product {
public void method() {
System.out.println("我是具体产品类A");
}
}
ConcreteProductB.javapackage com.hust.factory1;
//具体产品类B
public class ConcreteProductB extends Product {
public void method() {
System.out.println("我是具体产品类B");
}
}
Factory.javapackage com.hust.factory1;
//抽象工厂类
public abstract class Factory {
//抽象的工厂方法,具体生产什么有子类去实现
public abstract T createProduct(Class clz);
}
ConcreteFactory.java/**
*
*/
package com.hust.factory1;
/**
* @author tuke
*
*/
public class ConcreteFactory extends Factory {
/*
* 需要哪一个类就传入哪一个类的类型
*/
public T createProduct(Class clz) {//传入一个class类要决定生产哪一个产品
Product p=null;
try {
p=(Product) Class.forName(clz.getName()).newInstance();//根据类加载器实例化对象
} catch (Exception e) {
e.printStackTrace();
}
return (T) p;
}
}
Test.javapackage com.hust.factory1;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Factory mFactory=new ConcreteFactory();//实例化具体工厂
Product mProductA=mFactory.createProduct(ConcreteProductA.class);//根据类名初始化具体产品
mProductA.method();
Product mProductB=mFactory.createProduct(ConcreteProductB.class);
mProductB.method();
}
}
输出:我是具体产品类A
我是具体产品类B
具体实现例子:由工厂方法生产奥迪Q3,奥迪Q5,奥迪Q7AudiCar.java