創建型模式-工廠模式
工廠模式是我們最常用的實例化對象模式了,是用工廠方法代替new操作的一種模式。著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程序系統可以說是隨處可見。因爲工廠模式就相當於創建實例對象的new,我們經常要根據類Class生成實例對象,如A a=new A() 工廠模式也是用來創建實例對象的,所以以後new時就要多個心眼,是否可以考慮使用工廠模式,雖然這樣做,可能多做一些工作,但會給你係統帶來更大的可擴展性和儘量少的修改量。
//工廠類
public class Factory {
public Car getInstance(String name){
if (name.equals("Bens")){
return new Bens();
}else if (name.equals("Aodi")){
return new Aodi();
}else {
return null;
}
}
}
//接口
package factorymethod;
public interface Car {
String getName();
}
// 生產的對象
public class Byd implements Car{
@Override
public String getName() {
return "Byd";
}
}
// 生產的對象
public class Bens implements Car {
@Override
public String getName() {
return "Bens";
}
}
調用者
public class Cilent {
public static void main(String[] args) {
Factory factory = new Factory();
Car bensCar=factory.getInstance("Bens");
String name = bensCar.getName();
System.out.println(name);
}
}
存在的缺陷:
1、違背了開閉原則
2、分工不明確,維護困難
// A code block
var foo = 'bar';
import factorymethod.Car;
public interface Factory {
Car getCar();
}
// 奔馳的工廠
package simplefactory;
import factorymethod.Bens;
import factorymethod.Car;
public class BensFactory implements Factory {
@Override
public Car getCar() {
return new Bens();
}
}
// Byd工廠
package simplefactory;
import factorymethod.Byd;
import factorymethod.Car;
public class BydFactory implements Factory {
@Override
public Car getCar() {
return new Byd();
}
}
// 調用者
package simplefactory;
import factorymethod.Car;
public class Client {
public static void main(String[] args) {
Factory bensFactory = new BensFactory();
Factory bydFactory = new BydFactory();
Car bensCar = bensFactory.getCar();
Car bydCar = bydFactory.getCar();
String bensName = bensCar.getName();
String bydName = bydCar.getName();
System.out.println(bensName);
System.out.println(bydName);
}
}
缺點:增加了用戶操作的複雜性