“工厂模式”。它可以让在主调程序中,只需与工厂服务联系在一起,来获得工厂的引用,不与具体的实现类关联在一起,这样代码就提供了很好的解耦性。
//person接口定义
package project
public interface Person
{
public String sayHello(String name);
public String sayGoodBye(String name);
}
//下面是它的两个实现类
//下面是person的实现类Chinese
//================================
package project
public class Chinese implements Person
{
public String sayHello(String name)
{
return name + ",您好";
}
public String sayGoodBye(String name)
{
return name + ",下次再见";
}
}
//下面是Person接口的另一个类American
//================================
package project
public class American implements Person
{
public String sayHello(String name)
{
return name + ",Hello";
}
public String sayGoodBye(String name)
{
return name + ",Good Bye";
}
}
//下面是Person接口的工厂代码
//==============================
package project
public class PersonFactory
{
public Person getPerson(String ethnic)
{
if (ethnic.equalsIgnoreCase("ch"))
{
return new Chinese();
}
else
{
return new American();
}
}
}
//下面是测试类
package project
public class FactroyTest
{
public static void main(String[] args)
{
PersonFactory pf = new PersonFactory();
Person p = null;
//下面是通过工厂来得到Chinese类的一个实例
p = pf.getPerson("ch");
System.out.println(p.sayHello("网络时空"));
System.out.println(p.sayGoodBye("网络时空"));
//下面是通过工厂来得到American类的一个实例
p = pf.getPerson("am");
System.out.println(p.sayHello("网络时空"));
System.out.println(p.sayGoodBye("网络时空"));
}
}
结果:
网络时空,你好
网络时空,下次再见
网络时空,Hello
网络时空,Good Bye
总结:
主程序从Person接口的具体类中解耦出来,而且程序调用者无须关心person的实例化过程,角色划分清晰。主程序仅仅与工厂服务定位结合在一起,获得工厂的引用,程序将可获得所有工厂产生的实例。具体类的变化,重要接口不发生任何变化,调用者程序代码部分几乎不需要发生任何改变。