10.6.1 再访工厂方法

来源:互联网 发布:密室逃脱成本计算软件 编辑:程序博客网 时间:2024/06/14 05:46

通常的抽象工厂方法包含产品, 抽象产品, 工厂, 抽象工厂四个概念:

package com.cnsuning.animals;public class Animal {public Animal() {// TODO Auto-generated constructor stub}public static void main(String[] args) {// TODO Auto-generated method stub}public void run(){System.out.println("Animal run");}}package com.cnsuning.animals;import com.cnsuning.inter.Flyable;public class Bird extends Animal implements Flyable {public Bird() {}@Overridepublic void fly() {System.out.println("Bird can fly");}public static void main(String[] args) {Bird b = new Bird();b.fly();}@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("Bird run");}}package com.cnsuning.animals;import com.cnsuning.inter.CanFlyAndRun;public class Duck extends Animal implements CanFlyAndRun{public Duck() {}public static void main(String[] args) {Duck d = new Duck();d.fly();d.run();}@Overridepublic void fly() {System.out.println("Duck can fly");}@Overridepublic void run() {System.out.println("Duck run");}}package com.cnsuning.inter;import com.cnsuning.animals.Animal;public interface AnimalFactory {Animal getAnimal();}package com.cnsuning.factory;import com.cnsuning.animals.Animal;import com.cnsuning.animals.Bird;import com.cnsuning.inter.AnimalFactory;public class BirdFactory implements AnimalFactory {public BirdFactory() {}public static void main(String[] args) {}@Overridepublic Animal getAnimal() {return new Bird();}}package com.cnsuning.factory;import com.cnsuning.animals.Animal;import com.cnsuning.animals.Duck;import com.cnsuning.inter.AnimalFactory;public class DuckFactory implements AnimalFactory{public DuckFactory() {}public static void main(String[] args) {}@Overridepublic Animal getAnimal() {// TODO Auto-generated method stubreturn new Duck();}}package com.cnsuning.src;import com.cnsuning.animals.Animal;import com.cnsuning.factory.BirdFactory;import com.cnsuning.factory.DuckFactory;import com.cnsuning.inter.AnimalFactory;import com.cnsuning.inter.AnimalType;import com.cnsuning.util.Circle;public class Main {public Main() {// TODO Auto-generated constructor stub}public static void main(String[] args) {DuckFactory df = new DuckFactory();BirdFactory bf = new BirdFactory();animalRun(df);animalRun(bf);}public static void animalRun(AnimalFactory af){Animal a = af.getAnimal();a.run();}}

Duck runBird run
此外, 可以利用内部类将工厂直接集成到产品中, 进行部分简化:
package com.cnsuning.animals;import com.cnsuning.inter.AnimalFactory;import com.cnsuning.inter.Flyable;public class Bird extends Animal implements Flyable {public static AnimalFactory factory = new AnimalFactory(){@Overridepublic Animal getAnimal() {// TODO Auto-generated method stubreturn new Bird();}};public Bird() {}@Overridepublic void fly() {System.out.println("Bird can fly");}public static void main(String[] args) {Bird b = new Bird();b.fly();}@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("Bird run");}}package com.cnsuning.animals;import com.cnsuning.inter.AnimalFactory;import com.cnsuning.inter.CanFlyAndRun;public class Duck extends Animal implements CanFlyAndRun{public static AnimalFactory factory = new AnimalFactory(){@Overridepublic Animal getAnimal() {// TODO Auto-generated method stubreturn new Duck();}};public Duck() {}public static void main(String[] args) {Duck d = new Duck();d.fly();d.run();}@Overridepublic void fly() {System.out.println("Duck can fly");}@Overridepublic void run() {System.out.println("Duck run");}}package com.cnsuning.src;import com.cnsuning.animals.Animal;import com.cnsuning.animals.Bird;import com.cnsuning.animals.Duck;import com.cnsuning.factory.BirdFactory;import com.cnsuning.factory.DuckFactory;import com.cnsuning.inter.AnimalFactory;import com.cnsuning.inter.AnimalType;import com.cnsuning.util.Circle;public class Main {public Main() {// TODO Auto-generated constructor stub}public static void main(String[] args) {animalRun(Bird.factory);animalRun(Duck.factory);}public static void animalRun(AnimalFactory af){Animal a = af.getAnimal();a.run();}}

Bird runDuck run


0 0