可批量生产、达到标注化。解决用户和产品之间的关系。 对于调用者来说不关心产生的具体逻辑,只关心结果;而对于工厂来说,保证我们产生出来的结果是符合国际化标准的。 工厂模式:只对结果负责,确保产品的标准化。
image
Car.java
package com.demo.gc;
/**
* @description: 定义标准(类)
*/
public interface Car {
/**
* 获取一个标准的产品
* @return
*/
String getCarName();
}
BmCar.java
package com.demo.gc;
/**
* @description:
*/
public class BmCar implements Car {
@Override
public StringgetCarName() {
return "宝马";
}
}
BcCar .java
package com.demo.gc;
/**
* @description:
*/
public class BcCar implements Car {
@Override
public StringgetCarName() {
return "奔驰";
}
}
SimpleFactory.java
package com.demo.gc.simple;
import com.demo.gc.BcCar;
import com.demo.gc.BmCar;
/**
* @description:
*/
public class SimpleFactory {
public String getCarName(String type){
if("BC".equals(type)){
return new BcCar().getCarName();
}else if("BM".equals(type)){
return new BmCar().getCarName();
}else {
return "未找到该汽车生成的工厂,无法产出该汽车";
}
}
}
Test.java
package com.demo.gc.simple;
/**
* @description: 简单工厂模式
*/
public class Test {
public static void main(String[] args) {
//用户本身不关心生产的过程,而只需要关心最后的结果
//得到一个工厂
SimpleFactory simpleFactory=new SimpleFactory();
System.out.println(simpleFactory.getCarName("BC"));
System.out.println(simpleFactory.getCarName("BM"));
System.out.println(simpleFactory.getCarName("DC"));
}
}
Factory.java
package com.demo.gc.func;
import com.demo.gc.Car;
/**
* @description: 工厂方法模式
*/
public interface Factory {
//工厂必定会有一个生产的功能
Car getCarName();
}
BcCarFactory.java
package com.demo.gc.func;
import com.demo.gc.BcCar;
import com.demo.gc.Car;
/**
* @description:
*/
public class BcCarFactory implements Factory {
@Override
public Car getCarName() {
return new BcCar();
}
}
BmCarFactory.java
package com.demo.gc.func;
import com.demo.gc.BmCar;
import com.demo.gc.Car;
/**
* @description:
*/
public class BmCarFactory implements Factory {
@Override
public Car getCarName() {
return new BmCar();
}
}
Test.java
package com.demo.gc.func;
/**
* @description: 工厂模式
*/
public class Test {
public static void main(String[] args) {
Factory factory=new BmCarFactory();
System.out.println(factory.getCarName().getCarName());
}
}
CarFactory.java
package com.demo.gc.abstr;
import com.demo.gc.BcCar;
import com.demo.gc.BmCar;
import com.demo.gc.Car;
/**
* @description:
*/
public class CarFactory extends AbstractFactory {
@Override
public Car getBmCar() {
return new BmCar();
}
@Override
public Car getBcCar() {
return new BcCar();
}
}
AbstractFactory.java
package com.demo.gc.abstr;
import com.demo.gc.Car;
/**
* @description: 抽项工厂模式
*/
public abstract class AbstractFactory {
//方便于统一的管理
//与接口的区别,不仅仅只有接口的功能,还有抽象的逻辑;接口只是一接口
/**
* 获取bmCar
* @return
*/
public abstract Car getBmCar();
/**
* 获取bcCar
* @return
*/
public abstract Car getBcCar();
}
Test.java
package com.demo.gc.abstr;
/**
* @description:
*/
public class Test {
public static void main(String[] args) {
CarFactory factory=new CarFactory();
System.out.println(factory.getBcCar().getCarName());
System.out.println(factory.getBmCar().getCarName());
}
}