抽象工厂模式(一)

使用抽象工厂模式,完成下述产品等级结构:

 

 

(1)类图

 

//Man.java
package test4;
public interface Man {
    public void makeM();  
}
// WhiteMan.java
package test4;
public class WhiteMan implements Man {
    public void makeM() {
        System.out.println("我是白种男人!");
    }  
}
 //YelloeMan.java
package test4;
public class YellowMan implements Man {
    public void makeM() {
        System.out.println("我是黄种男人!");
    }  
}
//BlackMan.java
package test4;

public class BlackMan implements Man {
    @Override
    public void makeM() {
        System.out.println("我是黑种男人!");
    }    
}
 // Woman.java
package test4;
public interface Woman {
    public void makeW();
}
//WhiteWoman.java
package test4;
public class WhiteWoman implements Woman {
    @Override
    public void makeW() {
        System.out.println("我是白种女人!");
    }
}
 //YellowWoman.java
package test4;
public class YellowWoman implements Woman {
    public void makeW() {
        System.out.println("我是黄种女人!");
        
}
//BlackWoman.java
package test4;
public class BlackWoman implements Woman {
    @Override
    public void makeW() {
        System.out.println("我是黑种女人!");
    } 
}
//Color.java
package test4;
/*
 * 抽象工厂类 (肤色)
 */
public interface Color { 
 public Man produceMan();
 public Woman produceWoman();
}
 //White.java
package test4;
public class White implements Color{
    @Override
    public Man produceMan() {
        return new WhiteMan();
    }
    @Override
    public Woman produceWoman() {
        return new WhiteWoman();
    }
}
//Yellow.java
package test4;
public class Yellow implements Color{
    @Override
    public Man produceMan() {
        return new YellowMan();
    }
    @Override
    public Woman produceWoman() {
        return new YellowWoman();
    }
}
//Black.java
package test4;
public class Black implements Color{
    @Override
    public Man produceMan() {
        return new BlackMan();
    }
    @Override
    public Woman produceWoman() {
        return new BlackWoman();
    }
}
 //XMLUtil.java
package test4;
 import javax.xml.parsers.*;
 import org.w3c.dom.*;
 import java.io.File;
 public class XMLUtil {
     @SuppressWarnings("deprecation")
    public static Object getBean() {
         try {
                 //创建DOM文档对象
                 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
                 DocumentBuilder builder = dFactory.newDocumentBuilder();
                 Document doc;
                 doc = builder.parse(new File("config.xml"));
                 
                 //获取包含类名的文本节点
                 NodeList nl = doc.getElementsByTagName("className");
                 Node classNode = nl.item(0).getFirstChild();
                 String cName = classNode.getNodeValue();
                 System.out.println("类名:  "+ cName); //输出类名
                 //通过类名生成实例对象返回
                 Class c = Class.forName(cName);
                 Object obj = c.newInstance();
                 return obj;
         } catch (Exception e) {
             e.printStackTrace();
             return null;
         }
     }
 }
 //Client.java
package test4;
public class Client {
    public static void main(String[] args) {
        try 
        {
            Color color;
            Man man;
            Woman woman;
            color=(Color)XMLUtil.getBean();
            System.out.println(color);
            woman=color.produceWoman();
            woman.makeW();
            man=color.produceMan();
            man.makeM();
       }catch(Exception e){
           System.out.print(e.getMessage());
       } 
   }
}
 //config.xml
<?xml version="1.0" encoding="UTF-8"?>
 <config>
    <className>Black</className>
</config>

 

posted @ 2022-10-07 15:55  今天又双叒叕在敲代码  阅读(15)  评论(0编辑  收藏  举报