简单工厂模式
工厂模式主要实现的是,创建和使用之间的分离
百度百科概念解释
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
- 类图
- 实现方法
public interface car {
public String getName();
}
public class dazhong implements car{
public String getName() {
return "大众汽车";
}
}
public class aodi implements car{
public String getName() {
return "奥迪汽车";
}
}
public class CarFactory {
public car getCar(String name){
if(name.equals("大众")){
return new dazhong();
}
else if(name.equals("奥迪")){
return new aodi();
}
return null;
}
}
main方法
public class test {
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
car dazhong = carFactory.getCar("大众");
System.out.println(dazhong.getName());
car aodi = carFactory.getCar("奥迪");
System.out.println(aodi.getName());
}
}
//大众汽车
//奥迪汽车
- 优缺点
将对象的创建交给工厂进行,需要什么只需通过参数传递,不必知道对象是如何创建,但需要添加类,需要改变原有逻辑,没有遵循开闭原则,即当我有新的汽车类,比如来了个“日产”,就需要修改工厂类逻辑,再加上一个if-else。
工厂方法模式
工厂方法模式是为了弥补简单工厂模式的不足并且继承它的优点而延生出的一种设计模式,属于GoF中的一种。它能更好的符合开闭原则的要求。
定义:定义了一个用于创建对象的接口,但是让子类决定将哪一个类实例化。即让类的实例化延迟到子类
- 类图
- 代码实现
public interface car {
public String getName();
}
public class dazhong implements car{
public String getName() {
return "大众汽车";
}
}
public class aodi implements car{
public String getName() {
return "奥迪汽车";
}
}
public interface CarFactory {
public car getCar();
}
class aodiFactory implements CarFactory{
@Override
public aodi getCar(){
return new aodi();
}
}
class dazhongFactory implements CarFactory{
public dazhong getCar(){
return new dazhong();
}
}
main方法
public class test {
public static void main(String[] args) {
aodi aodi = new aodiFactory().getCar();
dazhong da = new dazhongFactory().getCar();
System.out.println(aodi.getName());
System.out.println(da.getName());
}
}
//奥迪汽车
//大众汽车
- 优缺点
优点:下次加入一种日产车,只需要新建一个richanFactory 就行,不会影响到别的工厂。
缺点:代码量加大,管理复杂,结构复杂,实际业务一般使用简单工厂模式