目录
一、核心本质二、 代码实现2.1 简单工厂2.2 工厂方法代码实现
三、 总结
简单工厂和工厂方法
一、核心本质
作用
实现了创建者和调用者分离
核心本质:
实例化对象不再使用new,使用工厂方法代替将选择实现类,创建对象统一管理控制,从而将调用者跟我们实现类分离
三种模式:
简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要扩展已有代码)工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
二、 代码实现
2.1 简单工厂
Car.interface
package factory
.simple
;
public interface Car {
void name();
}
Tesla.java
package factory
.simple
;
public class Tesla implements Car {
@Override
public void name() {
System
.out
.println("Tesla");
}
}
WuLing.java
package factory
.simple
;
public class WuLing implements Car{
@Override
public void name() {
System
.out
.println("五菱宏光");
}
}
Dazhong.java
package factory
.simple
;
public class Dazhong implements Car {
@Override
public void name() {
System
.out
.println("大众");
}
}
Consumer.java
package factory
.simple
;
public class Carfactory {
public static Car
getCar(String car
){
if(car
.equals("五菱")){
return new WuLing();
}else if(car
.equals("特斯拉")){
return new Tesla();
}else{
return null
;
}
}
public static Car
getWuLing(){
return new WuLing();
}
public static Car
getTesla(){
return new Tesla();
}
}
运行结果:
2.2 工厂方法代码实现
package factory
.method
;
public interface Car {
void name();
}
package factory
.method
;
public interface Carfactory {
Car
getCar();
}
package factory
.method
;
public class MoBai implements Car {
@Override
public void name() {
System
.out
.println("Mobai");
}
}
package factory
.method
;
public class Tesla implements Car {
@Override
public void name() {
System
.out
.println("Tesla");
}
}
package factory
.method
;
public class WuLing implements Car {
@Override
public void name() {
System
.out
.println("五菱宏光");
}
}
package factory
.method
;
public class MoBaiFactory implements Carfactory {
@Override
public Car
getCar(){
return new MoBai();
}
}
package factory
.method
;
public class TeslaFactory implements Carfactory {
@Override
public Car
getCar(){
return new Tesla();
}
}
package factory
.method
;
public class WuLingFactory implements Carfactory {
@Override
public Car
getCar(){
return new WuLing();
}
}
package factory
.method
;
import factory
.simple
.Carfactory
;
public class Consumer {
public static void main(String
[] args
) {
Car car
= new WuLingFactory().getCar();
Car car2
= new TeslaFactory().getCar();
Car car3
=new MoBaiFactory().getCar();
car
.name();
car2
.name();
car3
.name();
}
}
代码维护成本变高了,不用修改原代码了(解耦合)
三、 总结