//工厂设计模式
/*在接口Run中开始有两个方法runApp()和runApache();
*后期因业务需要,需要系统扩展,需要新加两个实现类RunImplB、RunImplC;
*此时我们发现,不光需要修改实现类还需要修改客户端代码
*这样的设计不太合理,无疑增加了代码维护工作量
*因此想一种好的办法,就是接口的修改后,不需要修改客户端,就能达到目的
*基于以上分析,工厂设计模式(factory_design_pattern)就由此展开
*即设计一个普通类,使用该类的静态方法拿到相关的执行类。
*/
interface Run{ //设计接口Run,并定义该接口的三个方法
public void runApp();
public void runApache();
public void cleanServer();
}
}
public void runApache(){
System.out.println("服务运行成功!");
}
public void cleanServer(){
System.out.println("清除服务器垃圾!");
}
}
class RunImplB implements Run{
public void runApp(){
System.out.println("已启动");
}
public void runApache(){
System.out.println("端口被占用,启动失败!");
}
public void cleanServer(){
System.out.println("垃圾已清理!");
}
}
class RunImplC implements Run{
public void runApp(){
System.out.println("启动失败");
}
public void runApache(){
System.out.println("启动成功");
}
public void cleanServer(){
System.out.println("清理中!");
}
}
public static Run getInstance(String className){ //使用该静态直接取得接口实例,返回值为该接口
if("RunImplA".equals(className)){
return new RunImplA();
}if("RunImplB".equals(className)){
return new RunImplB();
}else if("RunImplC".equals(className)){
return new RunImplC();
}else{
return null;
}
}
}
public static void main(String[] args){
Run factory = Factory.getInstance(args[0]); //为了模拟操作,我们在这里传入初始化操作;
if(factory != null){ //在命令提示符窗口运行时,将实例化类名传给它即可;
factory.runApache(); //比如:java FactoryTest RunImplA;
factory.runApp();
factory.cleanServer();
}
}
}
/*在接口Run中开始有两个方法runApp()和runApache();
*后期因业务需要,需要系统扩展,需要新加两个实现类RunImplB、RunImplC;
*此时我们发现,不光需要修改实现类还需要修改客户端代码
*这样的设计不太合理,无疑增加了代码维护工作量
*因此想一种好的办法,就是接口的修改后,不需要修改客户端,就能达到目的
*基于以上分析,工厂设计模式(factory_design_pattern)就由此展开
*即设计一个普通类,使用该类的静态方法拿到相关的执行类。
*/
interface Run{ //设计接口Run,并定义该接口的三个方法
public void runApp();
public void runApache();
public void cleanServer();
}
//接口的实现类,每个接口的实现类必须要实现接口的所有方法
class RunImplA implements Run{
public void runApp(){
System.out.println("App运行成功!");}
public void runApache(){
System.out.println("服务运行成功!");
}
public void cleanServer(){
System.out.println("清除服务器垃圾!");
}
}
class RunImplB implements Run{
public void runApp(){
System.out.println("已启动");
}
public void runApache(){
System.out.println("端口被占用,启动失败!");
}
public void cleanServer(){
System.out.println("垃圾已清理!");
}
}
class RunImplC implements Run{
public void runApp(){
System.out.println("启动失败");
}
public void runApache(){
System.out.println("启动成功");
}
public void cleanServer(){
System.out.println("清理中!");
}
}
//定义工厂类
class Factory{public static Run getInstance(String className){ //使用该静态直接取得接口实例,返回值为该接口
if("RunImplA".equals(className)){
return new RunImplA();
}if("RunImplB".equals(className)){
return new RunImplB();
}else if("RunImplC".equals(className)){
return new RunImplC();
}else{
return null;
}
}
}
//测试类
public class FactoryTest{public static void main(String[] args){
Run factory = Factory.getInstance(args[0]); //为了模拟操作,我们在这里传入初始化操作;
if(factory != null){ //在命令提示符窗口运行时,将实例化类名传给它即可;
factory.runApache(); //比如:java FactoryTest RunImplA;
factory.runApp();
factory.cleanServer();
}
}
}