JAVA设计模式——工厂方法模式

简单工厂模式的优点:工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是修改工厂类的,现在是修改客户端。
这里写图片描述

一个抽象对象接口,具体对象去实现接口,一个抽象工厂,获得抽象对象接口方法,具体工厂实现工厂接口方法,一个工厂产生一个具体对象实例。
/**
* 雷锋
*/
public interface LeiFeng {
void doThing();
void doGood();
}

/**
* 做志愿的大学生
*/
public class Undergraduate implements LeiFeng {
@Override
public void doThing() {
System.out.println(“大学生做志愿”);
}
@Override
public void doGood() {
System.out.println(“大学生做好事”);
}
}

/**
* 社区志愿者
*/
public class Volunteer implements LeiFeng {
@Override
public void doThing() {
System.out.println(“社区志愿者做志愿”);
}
@Override
public void doGood() {
System.out.println(“社区志愿者做好事”);
}
}

/**
* 雷锋工厂
*/
public interface LeiFengFactory {
LeiFeng getLeiFeng();
}

/**
* 获得做志愿大学生工厂
*/
public class UndergraduateFactory implements LeiFengFactory {
@Override
public LeiFeng getLeiFeng() {
return new Undergraduate();
}
}

/**
* 获得社区志愿者工厂
*/
public class VolunteerFactory implements LeiFengFactory {
@Override
public LeiFeng getLeiFeng() {
return new Volunteer();
}
}

public class Main {
public static void main(String[] args) {
LeiFeng leiFeng = new UndergraduateFactory().getLeiFeng();
leiFeng.doGood();
leiFeng.doThing();
leiFeng = new VolunteerFactory().getLeiFeng();
leiFeng.doGood();
leiFeng.doThing();
}
}

猜你喜欢

转载自blog.csdn.net/qq_36997245/article/details/81711804