簡單工廠模式轉換爲工廠方法模式

  1. 簡單工廠模式(靜態工廠模式)

1) 定義一個Dog類,若干屬性,若干方法
定義一個Dog工廠類;
寫一個測試客戶端類,分別用new運算符和工廠類工廠方法實例一個Dog類的對象,調用其各種方法。
2) 簡單工廠模式
定義一個抽象動物類,若干屬性,若干方法及三個派生類(具體動物類)Dog類,Cat類,Panda類,實現父類方法,按照簡單工廠模式再定義一個動物工廠類,能夠創建具體動物類對象。寫客戶端測試類,實例三個具體動物類,調用其方法。繪製類圖,寫出代碼。

abstract class Animal
{
	protected String color;
	protected int age;
	protected  String name ;
	
	public abstract void run();
	public void say()
	{
		System.out.println("I am "+age+ " years  old and my color is "+color);
	}
} 

class Dog extends Animal
{
	public Dog(String  color ,String name,int age)
	{
		this.color=color;
		this.name=name;
		this.age=age;
	}
	public void run()
	{
		System.out.println("A dog is running");
	}
}
class Cat extends Animal
{
	public Cat(String  color ,String name,int age)
	{
		this.color=color;
		this.name=name;
		this.age=age;
	}
	public void run()
	{
		System.out.println("A cat  is running");
	}
}
class Panda extends Animal
{
	public Panda(String  color ,String name,int age)
	{
		this.color=color;
		this.name=name;
		this.age=age;
	}
	public void run()
	{
		System.out.println("A panda  is running");
	}
}
class AnimalFactory
{
	Animal an;
	public Animal createAnimal(String x)
	{

		switch(x)
		{
			case "d" : 
			     an=new Dog("balck","jack",0); 
			     break;
			case "c" :
			     an=new Cat("yellow","tom",0);
			     break;
			case "p" : 
			     an=new Panda("yello","mimi",0);
		                     break;
			default: an=null;
			     break;
		}
		return an;
	}
}
public class Client
{
	public static void main(String[] zz)
	{
		Animal an;
		AnimalFactory fc=new AnimalFactory();
		an=fc.createAnimal("d");
		an.run();
		an.say();
		an=fc.createAnimal("c");
		an.run();
		an.say();
		an=fc.createAnimal("p");
		an.run();
		an.say();
				
	}

}

然後將上面代碼改寫爲工廠方法模式,並增加大象。

abstract class Animal
{
	protected String color;
	protected int age;
	protected  String name ;
	
	public abstract void run();
	public void say()
	{
		System.out.println("I am "+age+ " years  old and my color is "+color);
	}
} 

class Dog extends Animal
{
	public Dog(String  color ,String name,int age)
	{
		this.color=color;
		this.name=name;
		this.age=age;
	}
	public void run()
	{
		System.out.println("A dog is running");
	}
}
class Cat extends Animal
{
	public Cat(String  color ,String name,int age)
	{
		this.color=color;
		this.name=name;
		this.age=age;
	}
	public void run()
	{
		System.out.println("A cat  is running");
	}
}
class Panda extends Animal
{
	public Panda(String  color ,String name,int age)
	{
		this.color=color;
		this.name=name;
		this.age=age;
	}
	public void run()
	{
		System.out.println("A panda  is running");
	}
}

class Elephant extends Animal{
	public Elephant(String color,String name,int age) {
		this.color = color;
		this.name = name;
		this.age = age;		
	}
	public void run()
	{
		System.out.println("A Elephant  is running");
	}
}

class DogFactory {
	public Animal createAnimal() {
	Animal d = new Dog("balck","jack",0);
	return d; 
	}
}

class CatFactory {
	public Animal createAnimal() {
		Animal c = new Cat("yellow","tom",0);
		return c;
	}

}

class PandaFactory {
	public Animal createAnimal() {
		Animal p =new Panda("yello","mimi",0);
		return p;
	}

}

class ElephantFactory{
	public Animal createAnimal() {
		Animal e = new Elephant("balck","jack",0);
		return e;
	}

}

public class Factory {
	public static void main(String[] args) {
		Animal an;
		ElephantFactory ef = new ElephantFactory();
		an = ef.createAnimal();
		an.run();
		an.say();
		
		DogFactory df = new DogFactory();
		an = df.createAnimal();
		an.run();
		an.say();
		
		CatFactory cf = new CatFactory();
		an = cf.createAnimal();
		an.run();
		an.say();
		
		PandaFactory pf = new PandaFactory();
		an = pf.createAnimal();
		an.run();
		an.say();
	}
}
發佈了28 篇原創文章 · 獲贊 7 · 訪問量 4683
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章