意图: 简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。
简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例。
通常它根据自变量的不同返回不同的类的实例。
适用性:简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例。
工厂类(Creater)角色:担任这个角色的是简单工厂模式的核心,含有与应用紧密相关的商业逻辑。
工厂类在客户端的直接调用下创建产品对象,它往往由一个具体类实现。
抽象产品(Product)角色:担任这个角色的类是简单工厂模式所创建的对象的父类,或它们共同拥有的接口。
抽象产品角色可以用一个接口或者抽象类实现。
具体产品(Concrete Product)角色:简单工厂模式所创建的如何对象都是这个角色的实例,具体产品角色有一个具体类实现。
抽象产品(Product)角色
public interface Person {
public String sayHello(String name);
public String sayGoodBye(String name);
}
具体产品(Concrete Product)角色
public class Chinese implements Person {
@Override
public String sayGoodBye(String name) {
// TODO Auto-generated method stub
return "再见," + name;
}
@Override
public String sayHello(String name) {
// TODO Auto-generated method stub
return "你好," + name;
}
}
public class American implements Person {
@Override
public String sayGoodBye(String name) {
// TODO Auto-generated method stub
return "Good Bye," + name;
}
@Override
public String sayHello(String name) {
// TODO Auto-generated method stub
return "Hello," + name;
}
}
工厂类(Creater)角色
public class Factory {
public Person getFactory(String objectName){
if("chinese".equals(objectName)){
return new Chinese();
}else if("american".equals(objectName)){
return new American();
}else{
return null;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//原先的模式
/*Person chinese = new Chinese();
System.out.println(chinese.sayHello("张三"));
System.out.println(chinese.sayGoodBye("张三"));
Person american = new American();
System.out.println(american.sayHello("Tom"));
System.out.println(american.sayGoodBye("Tom"));*/
//使用工厂设计模式
Factory factory = new Factory();
Person chinese=factory.getFactory("chinese");
System.out.println(chinese.sayHello("张三"));
System.out.println(chinese.sayGoodBye("张三"));
Person american=factory.getFactory("american");
System.out.println(american.sayHello("Tom"));
System.out.println(american.sayGoodBye("Tom"));
}
}