工厂方法模式是一种常用的创建型设计模式。它解决了简单工厂模式的问题:如违反了开闭原则,其次可以用于更复杂的结构
它的核心结构有四个角色 抽象工厂;具体工厂;抽象产品;具体产品
抽象工厂(抽象类或接口)不在负责具体的创建过程,即具体的代码实现。只制定了规范,具体的实现将由具体的工厂去实现。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。
工厂方法模式(Factory Method pattern)是最典型的模板方法模式的应用
代码示例如下:
定义一个抽象工厂类:
/**
* 蛋糕工厂类
* 定义蛋糕工厂类 该类主要是定义了createCake抽象方法,
并且在无参构造函数中进行调用,具体的实现是在子类里进行实例化的
*/
public abstract class CakeFactory {
abstract Cake createCake();
public CakeFactory() {
createCake();
}
}
定义具体的工厂类:
/**
* @desc: 苹果蛋糕工厂类类
*/
public class AppleCakeFactory extends CakeFactory{
@Override
public Cake createCake() {
return new AppleCake();
}
}
/**
* @desc: 香蕉蛋糕工厂类
*/
public class BananaCakeFactory extends CakeFactory{
@Override
public Cake createCake() {
return new BananaCake();
}
}
定义抽象产品类:
/**
* 蛋糕父类
*/
public abstract class Cake {
}
定义具体的产品类:
/**
* 苹果蛋糕
*/
public class AppleCake extends Cake {
public AppleCake(){
System.out.println("创建了苹果蛋糕实例");
}
}
/**
* 香蕉蛋糕
*/
public class BananaCake extends Cake {
public BananaCake(){
System.out.println("创建了香蕉蛋糕实例");
}
}
测试类
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
AppleCakeFactory appleCakeFactory = new AppleCakeFactory();
BananaCakeFactory bananaCakeFactory = new BananaCakeFactory();
}
}
工厂方法经常用在以下两种情况中:
第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。java Collection中的iterator() 方法即属于这种情况。文章来源:https://www.toymoban.com/news/detail-562898.html
第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,这个决策过程对生产者来说是透明的。文章来源地址https://www.toymoban.com/news/detail-562898.html
到了这里,关于设计模式(二)、工厂模式--工厂方法模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!