上一次講了簡單工廠模式,我們可以做的其不滿足OCP原則,下面引入工廠方法模式
結構圖如下:
1.產品類
package com.sf.entity;
import com.sf.jk.Fruit;
public class Apple implements Fruit {
public Apple(){
System.out.println("生產水果");
}
public void eat() {
System.out.println("蘋果可以吃");
}
public void plant() {
// TODO Auto-generated method stub
System.out.println("蘋果可以種");
}
public void sell() {
// TODO Auto-generated method stub
System.out.println("蘋果可以賣");
}
}
package com.sf.entity;
import com.sf.jk.Fruit;
public class Banana implements Fruit{
public Banana(){
System.out.println("生產香蕉");
}
public void eat() {
// TODO Auto-generated method stub
System.out.println("香蕉可以吃");
}
public void plant() {
// TODO Auto-generated method stub
System.out.println("香蕉可以種");
}
public void sell() {
// TODO Auto-generated method stub
System.out.println("香蕉可以賣");
}
}
2.產品的抽象接口
package com.sf.jk;
public interface Fruit {
public void eat();
public void plant();
public void sell();
}
3.工廠的抽象接口
package com.sf.jk;
public interface CreateFactory {
public Fruit createFruit();
}
4.工廠的具體實現方法
package com.sf.hf;
import com.sf.entity.Apple;
import com.sf.jk.CreateFactory;
import com.sf.jk.Fruit;
public class CreateApple implements CreateFactory{
public Fruit createFruit() {
// TODO Auto-generated method stub
return new Apple();
}
}
package com.sf.hf;
import com.sf.entity.Banana;
import com.sf.jk.CreateFactory;
import com.sf.jk.Fruit;
public class CreateBanana implements CreateFactory{
public Fruit createFruit() {
// TODO Auto-generated method stub
return new Banana();
}
}
5.客戶端調用
import com.sf.hf.CreateApple;
import com.sf.hf.CreateBanana;
import com.sf.hf.FruitFactory;
import com.sf.jk.CreateFactory;
import com.sf.jk.Fruit;
public class Test {
private static CreateFactory cf1,cf2;
private static Fruit fruit;
public static void main(String[] args) {
System.out.println("---------創建蘋果---------");
cf1 = new CreateApple();
fruit = cf1.createFruit();
fruit.eat();
fruit.plant();
System.out.println("---------創建香蕉---------");
cf2 = new CreateBanana();
fruit = cf2.createFruit();
fruit.eat();
fruit.plant();
}
}
6.運行結果
---------創建蘋果---------
生產水果
蘋果可以吃
蘋果可以種
---------創建香蕉---------
生產香蕉
香蕉可以吃
香蕉可以種
簡單工廠模式與工廠方法的簡單比較:
我們可以看出,工廠方法滿足ocp原則,及對擴展開放,對修改關閉。
在工廠方法模式中,工廠被抽象成一個接口,具體的生產產品的實例化操作放在了其子類或者實現該幾口的具體方法中,
當客戶端可以根據不同的需求調用不同的實現方法,及生產產品的方法。