设计模式-抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式和工厂模式的要素是一样的。但是抽象工厂模式是提供一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。
比如我们上一篇模块中举的例子。
我们有运动员接口,有体育总局这个工厂接口,可以生产出不同的运动员协会,不同的远动员协会生产不同的运动员,那么我们可以让体育总局生产出不同的运动器材给不同的体育协会。让
抽象工厂示意图
他们自己的运动员使用。这就抽象工厂模式。
简单例子
package myDesignPatternsTest.abstrcFactoryPattern;
public interface Athletes {
public void run(SportsEquipment sportsEquipment);
public void eat();
public void sleep();
}
package myDesignPatternsTest.abstrcFactoryPattern;
public interface SportsEquipment {
public void create();
}
package myDesignPatternsTest.abstrcFactoryPattern;
public interface SimpleFactory {
public Athletes CreateAthletes();
public SportsEquipment CreateEquipment();
}
package myDesignPatternsTest.abstrcFactoryPattern;
public class RunEquiment implements SportsEquipment {
@Override
public void create() {
System.out.println("跑步器材");
}
}
package myDesignPatternsTest.abstrcFactoryPattern;
public class RunAthletes implements Athletes {
@Override
public void run(SportsEquipment sportsEquipment) {
sportsEquipment.create();
System.out.println("长跑运动员在跑");
}
@Override
public void eat() {
System.out.println("长跑运动员在吃");
}
@Override
public void sleep() {
System.out.println("长跑运动员在谁");
}
}
package myDesignPatternsTest.abstrcFactoryPattern;
public class RunFactory implements SimpleFactory {
@Override
public Athletes CreateAthletes() {
return new RunAthletes();
}
@Override
public SportsEquipment CreateEquipment() {
return new RunEquiment();
}
}
package myDesignPatternsTest.abstrcFactoryPattern;
public class SwingEquiment implements SportsEquipment {
@Override
public void create() {
System.out.println("游泳器材");
}
}
public class Swing implements Athletes {
@Override
public void run(SportsEquipment sportsEquipment) {
sportsEquipment.create();
System.out.println("游泳运动员在游泳");
}
@Override
public void eat() {
System.out.println("游泳运动员在吃");
}
@Override
public void sleep() {
System.out.println("游泳运动员在睡");
}
}
package myDesignPatternsTest.abstrcFactoryPattern;
public class SwingFactory implements SimpleFactory {
@Override
public Athletes CreateAthletes() {
return new Swing();
}
@Override
public SportsEquipment CreateEquipment() {
return new SwingEquiment();
}
}
package myDesignPatternsTest.abstrcFactoryPattern;
public class Client {
public static void main(String[] args) {
/* SimpleFactory simpleFactory=new SimpleFactory();
Athletes runAthletes=simpleFactory.CreateAthletes("Run");
runAthletes.eat();
runAthletes.run();
runAthletes.sleep();
Athletes swing=simpleFactory.CreateAthletes("Swing");
swing.sleep();
swing.run();
swing.eat();*/
SimpleFactory runFactory=new RunFactory();
SimpleFactory swingFactory = new SwingFactory();
Athletes runAthletes=runFactory.CreateAthletes();
SportsEquipment sportsEquipment=runFactory.CreateEquipment();
runAthletes.eat();
runAthletes.run(sportsEquipment);
runAthletes.sleep();
Athletes swing=swingFactory.CreateAthletes();
SportsEquipment swingE=swingFactory.CreateEquipment();
swing.sleep();
swing.run(swingE);
swing.eat();
}
}
长跑运动员在吃
跑步器材
长跑运动员在跑
长跑运动员在谁
游泳运动员在睡
游泳器材
游泳运动员在游泳
游泳运动员在吃
还没有评论,来说两句吧...