工厂方法模式
2023-12-30 23:26:14
工厂方法模式
Factory Method
模式定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory
Method 使得一个类的实例化延迟到子类
简单工厂:
class?SimpleFactory?{
public?static?Product?createProdcut(String?type)?{
if?(type.equals(?"0"?))?{
return?new?ProductA();
}?else?if?(type.equals(?"1"?))?{
return?new?ProductA1();
}?else?{
return?null;
}
?}
}
工厂方法:
//?稳定接口
interface?Product?{
?public?void?method1();
}
//?具体实现
class?ProductA?implements?Product?{
?public?void?method1()?{
?System.out.println(?"ProductA.method1?executed.?"?);
?}
}
class?ProductA1?implements?Product?{
?public?void?method1()?{
?System.out.println(?"ProductA1.method1?executed.?"?);
?}
}
abstract?class?Application?{
?abstract?Product?createProduct();
?Product?getObject()?{
?Product?product=createProduct();
?//?...
?//?...
?return?product;
?}
}
//?工厂方法具体实现类
class?ConcreteProductA?extends?Application?{
?@Override
?Product?createProduct()?{
?//?....
?return?new?ProductA();
?}
}
class?ConcreteProductA1?extends?Application?{
?@Override
?Product?createProduct()?{
?//...
?return?new?ProductA1();
?}
}
应用场景
1.当你不知道改使用对象的确切类型的时候
2.当你希望为库或框架提供扩展其内部组件的方法时
主要优点:
1.将具体产品和创建者解耦
2.符合单一职责原则
3.符合开闭原则
源码中的应用:
//?java?api
//?静态工厂方法
Calendar.getInstance()
java.text.NumberFormat.getInstance()
java.util.ResourceBundle.getBundle()
//?工厂方法
?java.net.URLStreamHandlerFactory
javax.xml.bind.JAXBContext.createMarshaller
??????????????????????????????????????????????????????????????????
文章来源:https://blog.csdn.net/Zhuxiaoyu_91/article/details/135310275
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!