close

Abstract Factory Pattern相對於Simple Factory Pattern只是將不同的Factory抽象化後,而多了Abstract Factory這一層。

Manner.java

public interface Manner {
	public void eatSomething() ;
}

Person.java

public class Person implements Manner {
	public void eatSomething() {
		System.out.println("Person eat something");
	}
}

Dog.java

public class Dog implements Manner {
	public void eatSomething() {
		System.out.println("Dog eat something");
	}
}

Cat.java

public class Cat implements Manner {
	public void eatSomething() {
		System.out.println("Cat eat something");
	}
}

Exercise.java

interface Exercise {
	public void getPlay() ;
}

Adult.java

public class Adult implements Exercise {
	@Override
	public void getPlay() {
		System.out.println("Adult play badminton");
	}
}

Child.java

public class Child implements Exercise {
	@Override
	public void getPlay() {
		System.out.println("child play basketball");
	}
}

AbstractFactory.java

abstract class AbstractFactory {
	public abstract Manner getEat(String type) ; 
	public abstract Exercise getPlay(String sport) ; 
}

ExerciseFactory.java

public class ExerciseFactory extends AbstractFactory {
	public Exercise getPlay(String sport){
		if(sport.equals("Child")){
			return new Child() ;
		}else if(sport.equals("Adult")){
			return new Adult() ;
		}
		return null ;
	}
	@Override
	public Manner getEat(String type) {
		return null;
	}
}

MannerFactory.java

public class MannerFactory extends AbstractFactory {
	public Manner getEat(String type){
		if(type.equals("Person")){
			return new Person() ;
		}else if(type.equals("Dog")){
			return new Dog() ;
		}else if(type.equals("Cat")){
			return new Cat() ;
		}
		return null ; 
	}
	@Override
	public Exercise getPlay(String sport) {
		return null;
	}
}

FactoryProducer.java

public class FactoryProducer {
	public static AbstractFactory getFactory(String choice){
		if(choice.equals("Exercise")){
			return new ExerciseFactory() ;
		}else if(choice.equals("Manner")){
			return new MannerFactory() ;
		}
		return null ;
	}
}

Main.java

public class Main {
	public static void main(String[] args) {
		FactoryProducer factoryProducer=new FactoryProducer() ;
		factoryProducer.getFactory("Manner").getEat("Person").eatSomething(); 
		factoryProducer.getFactory("Manner").getEat("Dog").eatSomething();
		factoryProducer.getFactory("Manner").getEat("Cat").eatSomething();
		
		FactoryProducer factoryProducer1=new FactoryProducer() ;
		factoryProducer1.getFactory("Exercise").getPlay("Adult").getPlay();
		factoryProducer1.getFactory("Exercise").getPlay("Child").getPlay();
	}
}
arrow
arrow
    全站熱搜

    Codeless 發表在 痞客邦 留言(0) 人氣()