创建型模式-工厂模式
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替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);
}
}
缺点:增加了用户操作的复杂性