工厂模式有三种,简单工厂,工厂方法和抽象工厂模式。
简单工厂:在工厂类中添加返回产品类对象的静态方法。
代码模版:
/**
*工厂类
*/
public class Factory{
private Factory{
public static Product1 getProduct1(){
return new Product1 ();
}
public static Product2 getProduct2(){
return new Product2 ();
}
//还有其他产品。。。。
}
public class Product1 {
//产品1成员
public void method1(){
}
}
public class Product2 {
//产品2成员
public void method2(){
}
}
`
调用时
public class Test {
public static void main(String[] args) {
//获得Product1 对象
Product1 product1 = Factory.getProduct1();
//调用Product1 的方法
product1.method1();
//获得Product2 对象
Product2 product2 = Factory.getProduct2();
//调用Product2 的方法
product2.method2();
}
}
3.工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪个类。
用一个食物工厂例子说明
定义一个食物抽象工厂接口
public interface FoodFactory {
public Food factory();
}
定义食物接口
public interface Food {
public void eat();
//这里放食物的共有方法
}
定义面包具体工厂,实现抽象工厂接口,生产面包对象
public class BreadFactory implements FoodFactory {
public Food factory() {
return new Bread();
}
}
定义肉类具体工厂,生产肉类对象
public class MeatFactory implements FoodFactory {
public Food factory() {
return new Meat();
}
}
定义面包类,实现食物接口
public class Bread implements Food {
public Bread(){
System.out.println("生产面包对象");
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("面包可以吃");
}
}
定义肉类,实现食物接口
public class Meat implements Food {
public Meat() {
System.out.println("生产肉类对象");
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("肉可以吃");
}
}
测试一下
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
FoodFactory breadfactory = new BreadFactory();
Food bread = breadfactory.factory();
bread.eat();
FoodFactory meatfactory = new MeatFactory();
Food meet = meatfactory.factory();
meet.eat();
}
}
测试结果:
生产面包对象
面包可以吃
生产肉类对象
肉可以吃