- 簡單工廠模式(靜態工廠模式)
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();
}
}