工厂模式
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
Demo
我们创建一个 Author 接口和实现 Author 接口的实体类。下一步是定义工厂类 AuthorFactory 。FactoryPatternDemo 类使用 ShapeFactory 来获取 Author 对象。它将向 AuthorFactory 传递信息来获取它所需对象的类型。
- Author
public interface Author {
public void talk();
}
- Author 实体
public class TangSan implements Author {
@Override
public void talk() {
System.out.println("I am tangsan!");
}
}
public class XueHong implements Author {
@Override
public void talk() {
System.out.println("I am pighead xuehong!");
}
}
public class YanYuJiangNan implements Author {
@Override
public void talk() {
System.out.println("I am yanyujiangnan!");
}
}
- AuthorFactory
public class AuthorFactory {
public Author getAuthor(String authorName){
switch (authorName){
case "XueHong":
return new XueHong();
case "TangSan":
return new TangSan();
case "YanYuJiangNan":
return new YanYuJiangNan();
default:
return null;
}
}
}
- FactoryPatternDemo
public class FactoryPatternDemo {
public static void main(String[] args) {
AuthorFactory authorFactory = new AuthorFactory();
Author yyjn = authorFactory.getAuthor("YanYuJiangNan");
yyjn.talk();
Author xh = authorFactory.getAuthor("XueHong");
xh.talk();
Author ts = authorFactory.getAuthor("TangSan");
ts.talk();
}
}
- 运行结果
I am yanyujiangnan!
I am pighead xuehong!
I am tangsan!
Process finished with exit code 0