工厂方法模式

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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。