定义:
又称虚拟构造函数模式或者多态性工厂模式,定义一个创建产品的工厂接口,将实际性创建工作推迟到子类中
四角色
-
抽象工厂
-
具体工厂:创建产品对象
-
抽象产品
-
具体产品
优点:
- 良好的封装性,代码结构清晰
- 优秀的可扩展性
- 屏蔽产品类
- 典型的解耦框架
实例:农场系统
package 工厂模式;
public interface Gardener {
public Fruit factory();
}
package 工厂模式;
public interface Fruit {
public void grow();
public void harvest();
public void plant();
}
package 工厂模式;
public class AppleGardener implements Gardener{
@Override
public Fruit factory() {
// TODO 自动生成的方法存根
return new Apple();
}
}
package 工厂模式;
public class GrapeGardener implements Gardener{
@Override
public Fruit factory() {
// TODO 自动生成的方法存根
return new Grape();
}
}
package 工厂模式;
public class Apple implements Fruit{
@Override
public void grow() {
// TODO 自动生成的方法存根
System.out.println("苹果正在生长");
}
@Override
public void harvest() {
// TODO 自动生成的方法存根
System.out.println("收获苹果");
}
@Override
public void plant() {
// TODO 自动生成的方法存根
System.out.println("栽种苹果");
}
}
package 工厂模式;
public class Grape implements Fruit{
@Override
public void grow() {
// TODO 自动生成的方法存根
System.out.println("葡萄正在生长");
}
@Override
public void harvest() {
// TODO 自动生成的方法存根
System.out.println("收获葡萄");
}
@Override
public void plant() {
// TODO 自动生成的方法存根
System.out.println("栽种葡萄");
}
}
package 工厂模式;
public class 农场 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Gardener gardener = new AppleGardener();
Fruit appleFruit = gardener.factory();
appleFruit.plant();
appleFruit.grow();
appleFruit.harvest();
Gardener gardener2 = new GrapeGardener();
Fruit grapeFruit = gardener2.factory();
grapeFruit.plant();
grapeFruit.grow();
grapeFruit.harvest();
}
}
栽种苹果
苹果正在生长
收获苹果
栽种葡萄
葡萄正在生长
收获葡萄