工厂模式
作用:
- 实现了创建者和调用者的分享
- 简单工厂模式
- 用来生产同一等级结构中的任意产品(对于增加新的产品,需要球盖已有代码)
- 工厂方法模式
- 用来生产同一等级结构中的固定产品(支持增加任意产品)
- 抽象工厂模式
- 围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
- 简单工厂模式
OOP七大原则
- 开闭原则:一个软件的实体应当对扩展开放,对修改关闭
- 依赖倒转原则:要针对接口编程,不要针对实现编程
- 迪米特法则:只与你直接的朋友通信,而避免和陌生人通信
1.普通的方法
//接口
package com.lan.factory.simple;
public interface Car {
void name();
}
//类
public class WuLing implements Car {
@Override
public void name() {
System.out.println("五菱宏光");
}
}
//类
package com.lan.factory.simple;
public class Tesla implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
//测试类
package com.lan.factory.simple;
public class Consumer {
public static void main(String[] args) {
//接口,所有的实现类!工厂
Car car = new WuLing();
Car car2 = new Tesla();
car.name();
car2.name();
}
}
2、简单工厂
//车工厂
package com.lan.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;
}
}
}
package com.lan.factory.simple;
public class Consumer {
public static void main(String[] args) {
//接口,所有的实现类!工厂
// Car car = new WuLing();
// Car car2 = new Tesla();
//2.使用工厂创建
Car car = CarFactory.getCar("五菱");
Car car2 = CarFactory.getCar("特斯拉");
car.name();
car2.name();
}
}
3、工厂模式
一种产品对应一个工厂
接口
package com.lan.factory.method;
public interface Car {
void name();
}
package com.lan.factory.method;
//工厂方法模式
public interface CarFactory {
Car getCar();
}
类 (都是重写 Car 接口)
package com.lan.factory.method;
public class MoBai implements Car {
@Override
public void name() {
System.out.println("摩拜单车");
}
}
package com.lan.factory.method;
public class Tesla implements Car{
@Override
public void name() {
System.out.println("特斯拉");
}
}
package com.lan.factory.method;
public class WuLing implements Car {
@Override
public void name() {
System.out.println("五菱");
}
}
每个车对应的工厂,一车对应一工厂(重写的是 CarFactory 类)
package com.lan.factory.method;
public class MoBaiFactory implements CarFactory {
@Override
public Car getCar() {
return new MoBai();
}
}
package com.lan.factory.method;
public class TeslFactory implements CarFactory {
@Override
public Car getCar() {
return new Tesla();
}
}
package com.lan.factory.method;
public class WulingFactory implements CarFactory {
@Override
public Car getCar() {
return new WuLing();
}
}
测试类
package com.lan.factory.method;
public class Consumer {
public static void main(String[] args) {
Car car1 = new WulingFactory().getCar();
Car car2 = new TeslFactory().getCar();
car1.name();
car2.name();
Car car3 = new MoBaiFactory().getCar();
car3.name();
}
}