设计模式(java)

博客围绕三种工厂模式展开,包括简单工厂模式,模拟女娲造人场景并增加新类;工厂方法模式,描述海尔、美的工厂生产空调场景;抽象工厂模式,实现电脑配件生产过程。同时给出了三种模式的代码实现。

一、题目分析
(1)、简单工厂模式
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
(2)、工厂方法模式
海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。
(3)、抽象工程模式
电脑配件生产工厂生产内存、CPU等硬件设备,这些内存、CPU的品牌、型号并不一定相同,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现电脑配件生产过程并绘制相应的类图,绘制类图并编程实现。
二、代码实现
(1)简单工厂模式

1.1 M.java
package simplefactory;

public  class M implements NvWa
  {
     public void play()
     {
         System.out.println("男人创造中......");
     }    
  } 
1.2 W.java
package simplefactory;

public class W implements NvWa{
	      public void play()
	      {
	          System.out.println("女人创造中......");
	     }    

}

1.3 R.java
package simplefactory;

public class R implements NvWa {
	public void play()
	{
		System.out.println("机器人创造中......");
	}    
 
}
1.4 NvWa.java
package simplefactory;

public interface NvWa {
	
	public void play();
		  
}
1.5 People.java
package simplefactory;

public class People {
		       public static void main(String [] args)
		       {
		            try
		            {
		               NvWa nvwa;
		               String brandName=XMLUtilTV.getBrandName();
		               nvwa=PeopleFactory.producePeople(brandName);
		               nvwa.play();
		           }
		           catch(Exception e)
		           {
		               System.out.println(e.getMessage());
		           }
		     }

}
1.6 PeopleFactory.java
package simplefactory;

public class PeopleFactory {
	public static NvWa producePeople(String brand) throws Exception
	      {
	          if(brand.equalsIgnoreCase("M"))
	          {
	              System.out.println("女娲在创造男人!");
	             return new M();
	         }
	         else if(brand.equalsIgnoreCase("W"))
	         {
	             System.out.println("女娲在创造女人!");
	             return new W();
	         }
	         else if(brand.equalsIgnoreCase("R"))
	         {
	             System.out.println("女娲在创造机器人!");
	             return new R();
	         }
	         else
	         {
	             throw new Exception("对不起,我还是一块泥巴!");
	         }
     }
	 

}
1.7 XMLUtilTV.java
package simplefactory;

import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtil
{
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象
	public static Object getBean()
	{
		try
		{
			//创建文档对象
			DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = dFactory.newDocumentBuilder();
			Document doc;							
			doc = builder.parse(new File("configPeople.xml")); 
		
			//获取包含类名的文本节点
			NodeList nl = doc.getElementsByTagName("className");
            Node classNode=nl.item(0).getFirstChild();
            String cName=classNode.getNodeValue();
            
            //通过类名生成实例对象并将其返回
            Class c=Class.forName(cName);
	  	    Object obj=c.newInstance();
            return obj;
           }   
           	catch(Exception e)
           	{
           		e.printStackTrace();
           		return null;
           	}
		}
}

(2)工厂方法模式

2.1 AirCondition.java
package factorymethod;

public interface AirCondition {
		public void play();
}

2.2 AirConditionFactory.java
package factorymethod;

public interface AirConditionFactory {
	
	public AirCondition produceAirCondition();
}

2.3 Client.java
package factorymethod;

public class Client
{
	public static void main(String args[])
	{
         try
         {
         	AirCondition aircondition;
         	AirConditionFactory factory;
         	factory=(AirConditionFactory)XMLUtil.getBean();
         	aircondition=factory.produceAirCondition();
         	aircondition.play();
         }
         catch(Exception e)
         {
         	System.out.println(e.getMessage());
         }
	}
}

2.4 Haier.java
package factorymethod;

public class Haier implements AirCondition{
	public void play()
	{
		System.out.println("海尔空调使用中......");
	}

}

2.5 HaierFactory.java
package factorymethod;

public class HaierFactory implements AirConditionFactory
{
    public AirCondition produceAirCondition()
    {
    	System.out.println("海尔空调工厂生产海尔空调。");
    	return new Haier();
    }

}

2.6 Midea.java
package factorymethod;

public class Midea implements AirCondition
{
	public void play()
	{
		System.out.println("美的空调使用中......");
	}
}

2.7 MideaFactory.java
package factorymethod;

public class MideaFactory implements AirConditionFactory
{
    public AirCondition produceAirCondition()
    {
    	System.out.println("美的空调工厂生产美的空调。");
    	return new Midea();
    }
}

2.8 XMLUtil.java
package factorymethod;

import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtil
{
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象
	public static Object getBean()
	{
		try
		{
			//创建文档对象
			DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = dFactory.newDocumentBuilder();
			Document doc;							
			doc = builder.parse(new File("FactoryMethodconfig.xml")); 
		
			//获取包含类名的文本节点
			NodeList nl = doc.getElementsByTagName("className");
            Node classNode=nl.item(0).getFirstChild();
            String cName=classNode.getNodeValue();
            
            //通过类名生成实例对象并将其返回
            Class c=Class.forName(cName);
	  	    Object obj=c.newInstance();
            return obj;
           }   
           	catch(Exception e)
           	{
           		e.printStackTrace();
           		return null;
           	}
		}
}

(3)抽象工厂模式

3.1 ComputerAccessoriesFactory.java
package abstractfactory;

public interface ComputerAccessoriesFactory {
    CPU produceCPU();
    RAM produceRAM();

}
3.2 CPU.java
package abstractfactory;

public interface CPU {
    void discribe();

}

3.3 MacCPU.java
package abstractfactory;

public class MacCPU implements CPU{
       public void discribe()
       {
              System.out.println("这是在生产 Mac_CPU");
       }

}
3.4 MacFactory.java
package abstractfactory;

public  class MacFactory implements ComputerAccessoriesFactory{
    public MacCPU produceCPU() {
           System.out.println("MacCPU生产完成");
           return new MacCPU();
    }

    public MacRAM produceRAM() {
           System.out.println("MacARM生产完成");
           return new MacRAM();
    }
}

3.5 MacRAM.java
package abstractfactory;

public class MacRAM implements RAM
{

       public void discribe()
       {
              System.out.println("MacRAM");

       }

}

3.6 PcCPU.java
package abstractfactory;

public class PcCPU implements CPU
{
       public void discribe()
       {
              System.out.println("这是在生产PC_CPU");
              }

}

3.7 PcFactory.java
package abstractfactory;

public  class PcFactory implements ComputerAccessoriesFactory
{
       public PcCPU produceCPU() {
              System.out.println("PC_CPU生产完成!");
              return new PcCPU();
       }
 
       public PcRAM produceRAM() {
             System.out.println("PC_RAM生产完成 !");
              return new PcRAM();
       }
}

3.8 PcRAM.java
package abstractfactory;

public class PcRAM implements RAM
{
       public void discribe()

       {
             System.out.println("PcRAM");
       }
}

3.9 RAM.java
package abstractfactory;

public interface RAM {

	void discribe();

}

3.10 Test.java
package abstractfactory;

public class Test {

	public static void main(String[] args) {
		try
        {
        	CPU cpu;
        	RAM ram;
        	ComputerAccessoriesFactory factory;
        	factory=(ComputerAccessoriesFactory)XMLUtil.getBean();
        	cpu=factory.produceCPU();
        	cpu.discribe();
        	ram=factory.produceRAM();
        	ram.discribe();
        }
        catch(Exception e)
        {
        	System.out.println(e.getMessage());
        }
	}
}


3.11 XMLUtil.java

package abstractfactory;

import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtil
{
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象
	public static Object getBean()
	{
		try
		{
			//创建文档对象
			DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = dFactory.newDocumentBuilder();
			Document doc;							
			doc = builder.parse(new File("AbstractFactoryconfig.xml")); 
		
			//获取包含类名的文本节点
			NodeList nl = doc.getElementsByTagName("className");
            Node classNode=nl.item(0).getFirstChild();
            String cName=classNode.getNodeValue();
            
            //通过类名生成实例对象并将其返回
            Class c=Class.forName(cName);
	  	    Object obj=c.newInstance();
            return obj;
           }   
           	catch(Exception e)
           	{
           		e.printStackTrace();
           		return null;
           	}
		}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值