工厂(Factory)模式:定义一个用于创建产品的接口,由子类决定生产什么产品
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
创建一个People
的接口,定义一个skill
的方法。
public interface People {
void skill();
}
创建类Teacher
,并实现People
接口
public class Teacher implements People {
@Override
public void skill() {
System.out.println("I am a teacher.");
}
}
创建类Student
,并实现People
接口
public class Student implements People {
@Override
public void skill() {
System.out.println("I am a student.");
}
}
创建工厂类PeopleFactory
,根据传入的参数不同,返回不同的实例
public class PeopleFactory {
public People getPeople(String className) {
if (className.equals(Student.class.getSimpleName())) {
return new Student();
} else if (className.equals(Teacher.class.getSimpleName())) {
return new Teacher();
}
return null;
}
}
测试工厂类的实现
public class Test {
public static void main(String[] args) {
PeopleFactory factory = new PeopleFactory();
People p = factory.getPeople("Teacher");
p.skill();
}
}
测试输出效果
I am a teacher.
优缺点
1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。
4、每次增加一个产品时,都需要增加一个具体类和对象实现工厂,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
模式结构
1、抽象工厂(Abstract Factory):创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。
2、具体工厂(ConcreteFactory):实现抽象工厂中的抽象方法,完成具体产品的创建。
3、抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
4、具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
参考文章
1、https://www.runoob.com/design-pattern/factory-pattern.html
2、http://c.biancheng.net/view/1348.html
本文由 新逸Cary 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:https://blog.xinac.cn/archives/java-design-factory.html
最后更新:2020-08-07 14:15:52
Update your browser to view this website correctly. Update my browser now