java 工厂设计模式

//工厂设计模式
/*在接口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();
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章