①解决了增加新产品的问题(创建一个工厂和一个新产品即可)
②符合开闭原则
③一个工厂创建一个产品
代码模板:
public interface Creator{
public Product factory(); // 工厂返回值为产品超类的类型
}
public class CreatorA implements Creator{
public Product factory(){
return new ProductA();
}
}
public class CreatorB implements Creator{
public Product factory(){
return new ProductB();
}
}
public interface Product{
public void show();
}
public class ProductA implements Product{
public void show(){
System.out.println("正在生产A产品");
}
}
public class ProductB implements Product{
public void show(){
System.out.println("正在生产B产品");
}
}
public class Client{
public static void main(String[] args){
Creator c = new CreatorA();
Product p = c.factory();
p.show();
}
}
例题:
public interface Creator {
public Fruit factory();
}
public class CreatorApple implements Creator{
public Fruit factory() {
return new Apple();
}
}
public class CreatorGrape implements Creator{
public Fruit factory() {
return new Grape();
}
}
public class CreatorStrawberry implements Creator{
public Fruit factory() {
return new Strawberry();
}
}
public interface Fruit {
public void show();
}
public class Apple implements Fruit {
public void show() {
System.out.println("正在生产苹果");
}
}
public class Grape implements Fruit {
public void show() {
System.out.println("正在生产葡萄");
}
}
public class Strawberry implements Fruit{
public void show() {
System.out.println("正在生产草莓");
}
}
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String s;
s = "";
while(!s.equals("0")) {
System.out.println("请输入要生产的水果,苹果输入 1,葡萄输入 2,草莓输入 3, 退出输入 0 !");
s = reader.nextLine();
Creator c = null;
if(s.equals("0")) {
System.out.println("退出成功!");
break;
}
else if(s.equals("1")) c = new CreatorApple();
else if(s.equals("2")) c = new CreatorGrape();
else c = new CreatorStrawberry();
Fruit f = c.factory();
f.show();
}
}
}