抽象工厂模式的好处:
当增加需求的时候,不需要修改源代码,只需定义一个类实现Play接口,定义一个工厂类实现PlayFactory 即 定义类实现顶级接口,定义工厂类实现特定的接口
代码:
/**
* 定义一个接口:
* 方法:玩游戏
*/
package ac.bcc.cn.interf;
public interface Play {
/**
* 玩的方法
*/
public abstract void paly();
}
/**
*此类实现Play接口
*/
package ac.bcc.cn.clas;
import ac.bcc.cn.interf.Play;
public class PlayBasketBale implements Play {
@Override
public void paly() {
System.out.println("正在打篮球");
}
}
/**
* 此类实现Play接口
*/
package ac.bcc.cn.clas;
import ac.bcc.cn.interf.Play;
public class PlayComputer implements Play{
@Override
public void paly() {
System.out.println("正在打LOL");
}
}
/**
* 工厂类:使用多态,创建对象
* 实现了PlayFactory接口
*/
package ac.bcc.cn.factory;
import ac.bcc.cn.clas.PlayBasketBale;
import ac.bcc.cn.interf.Play;
import ac.bcc.cn.interf.PlayFactory;
public class BaseketBallGameFactory implements PlayFactory{
@Override
public Play creatInstance() {
return new PlayBasketBale();
}
}
/**
* 工厂类:使用多态,创建对象
* 实现了PlayFactory接口
*/
package ac.bcc.cn.factory;
import ac.bcc.cn.clas.PlayComputer;
import ac.bcc.cn.interf.Play;
import ac.bcc.cn.interf.PlayFactory;
public class ComputerGameFactory implements PlayFactory{
@Override
public Play creatInstance() {
return new PlayComputer();
}
}
/**
* 测试类
*/
package ac.bcc.cn.test;
import ac.bcc.cn.factory.BaseketBallGameFactory;
import ac.bcc.cn.factory.ComputerGameFactory;
import ac.bcc.cn.interf.Play;
public class Test {
public static void main(String[] args) {
//通过ballGameFactory工厂,获取打电子游戏对象
BaseketBallGameFactory ballGameFactory = new BaseketBallGameFactory();
Play bask = ballGameFactory.creatInstance();
bask.paly();
//通过computerGameFactory工厂,获取打电子游戏对象
ComputerGameFactory computerGameFactory = new ComputerGameFactory();
Play computer = computerGameFactory.creatInstance();
computer.paly();
}
}
结果: