场景
工厂模式是根据不同的参数创建对象。解决耦合的问题,工厂作为一个中间件存在。Spring中IOC是工厂模式的一种实现。工厂方法是由子类自行决定实例化那个类,而抽象工厂是自己决定实例化哪个类。缺点增加一种实现就需要修改一次FootballerFactory 建议使用抽象工厂
Sample
Factory 加入了单例
package com.lohamce.dp.samples.factory;
public interface FootballPlayer {
void shoot();
void pass();
void defend();
}
package com.lohamce.dp.samples.factory;
public class Chinese implements FootballPlayer {
@Override
public void shoot() {
System.out.println("Missed");
}
@Override
public void pass() {
System.out.println("Missed");
}
@Override
public void defend() {
System.out.println("Missed");
}
}
package com.lohamce.dp.samples.factory;
public class Japanese implements FootballPlayer {
@Override
public void shoot() {
System.out.println("Good");
}
@Override
public void pass() {
System.out.println("Perfect");
}
@Override
public void defend() {
System.out.println("Missed");
}
}
package com.lohamce.dp.samples.factory;
public class FootballPlayerFactory {
public static final int CHINA = 1;
public static final int JAPAN = 2;
private FootballPlayerFactory(){
}
private static final FootballPlayerFactory footballPlayerFactory = new FootballPlayerFactory();
public static FootballPlayerFactory getInstance(){
return footballPlayerFactory;
}
FootballPlayer createFootballPlayer(int nationality){
FootballPlayer player = null;
switch(nationality) {
case CHINA:
player = new Chinese();
break;
case JAPAN:
player = new Japanese();
break;
}
return player;
}
}
package com.lohamce.dp.samples.factory;
public class Test {
public static void main(String[] args) {
FootballPlayer player = FootballPlayerFactory.getInstance().createFootballPlayer(FootballPlayerFactory.JAPAN);
player.pass();
}
}
Reference
java.util.Calendar – getInstance()
java.util.Calendar – getInstance(TimeZone zone)
java.util.Calendar – getInstance(Locale aLocale)
java.util.Calendar – getInstance(TimeZone zone, Locale aLocale)
java.text.NumberFormat – getInstance()
java.text.NumberFormat – getInstance(Locale inLocale)