核心本质
- 实例化对象不使用new,用工厂方法代替
- 将选择实现类,创建对象统一管理和控制,从而将调用者跟现实类解耦
三种模式
简单工厂模式
用来产生同一等级结构中的上任意产品,对于新增加的产品,需要覆盖已有的代码
工厂方法模式
用来产生同一结构中的固定产品,支持新增加的任意产品
抽象工厂模式
围绕一个超级工厂创造其他工厂,被称为工厂的工厂
代码实现
简单工厂
public interface Car {
void name();
}
public class WuLing implements Car {
@Override
public void name() {
System.out.println("五菱宏光");
}
public class TeSL implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
public class FactoryDemo {
public static Car getCar(String car){
if(car.equals("五菱")){
return new WuLing();
}else if (car.equals("特斯拉")){
return new TeSL();
}else{
return null;}
}
}
public class Test {
public static void main(String[] args) {
FactoryDemo.getCar("五菱").name();
FactoryDemo.getCar("特斯拉").name();
}
}
工厂方法
public interface Car {
void name();
}
public interface Factory1 {
Car getCar();
}
public class TsLFactory implements Factory1 {
@Override
public Car getCar() {
return new TeSL();
}
}
public class WuLingFactory implements Factory1 {
@Override
public Car getCar() {
return new WuLing();
}
}
public class Test {
public static void main(String[] args) {
new WuLingFactory().getCar().name();
new TsLFactory().getCar().name();
}
}
抽象工厂
public interface PhoneProduct {
void start();
void shoutdown();
void call();
void sell();
}
public class XiaoMiPhoneProduct implements PhoneProduct {
@Override
public void start() {
System.out.println("小米开机");
}
@Override
public void shoutdown() {
System.out.println("小米关机");
}
@Override
public void call() {
System.out.println("小米打电话");
}
@Override
public void sell() {
System.out.println("小米发短信");
}
}
public class HuaweiPhoneProduct implements PhoneProduct {
@Override
public void start() {
System.out.println("华为开机");
}
@Override
public void shoutdown() {
System.out.println("华为关机");
}
@Override
public void call() {
System.out.println("华为打电话");
}
@Override
public void sell() {
System.out.println("华为发短信");
}
}
public interface RountProduct {
void start();
void shoutdown();
void setting();
void correct();
}
public class XiaoMiRout implements RountProduct {
@Override
public void start() {
System.out.println("小米开机");
}
@Override
public void shoutdown() {
System.out.println("小米关机");
}
@Override
public void setting() {
System.out.println("小米设置");
}
@Override
public void correct() {
System.out.println("小米修改");
}
}
public class HuaweiRount implements RountProduct {
@Override
public void start() {
System.out.println("华为开机");
}
@Override
public void shoutdown() {
System.out.println("华为管机");
}
@Override
public void setting() {
System.out.println("华为设置");
}
@Override
public void correct() {
System.out.println("华为修改");
}
}
public interface ProductFactory {
RountProduct rount();
PhoneProduct phone();
}
public class HuaWeiFactory implements ProductFactory {
@Override
public RountProduct rount() {
return new HuaweiRount() ;
}
@Override
public PhoneProduct phone() {
return new HuaweiPhoneProduct();
}
}
public class XiaoMiFactory implements ProductFactory {
@Override
public RountProduct rount() {
return new XiaoMiRout();
}
@Override
public PhoneProduct phone() {
return new XiaoMiPhoneProduct();
}
}
package JOF23.AbstractFactory;
public class Test {
public static void main(String[] args) {
System.out.println("----------小米系列---------------");
XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
xiaoMiFactory.phone().call();
xiaoMiFactory.phone().sell();
xiaoMiFactory.phone().shoutdown();
xiaoMiFactory.phone().start();
xiaoMiFactory.rount().setting();
xiaoMiFactory.rount().correct();
System.out.println("---------华为系列--------------");
HuaWeiFactory huaWeiFactory = new HuaWeiFactory();
huaWeiFactory.phone().sell();
huaWeiFactory.phone().call();
huaWeiFactory.rount().correct();
huaWeiFactory.rount().setting();
}
}