工厂方法模式的定义
工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
它包含了如下角色:
模式的UML类图
实例
假设有三个笔芯,分别是红笔芯、蓝笔芯和黑笔芯。用户希望通过圆珠笔来明确笔芯的颜色。
模式的结构的描述与使用
1.抽象产品(Product): PenCore.java
public abstract class PenCore{ String color; public abstract void writeWord(String s); }
2.具体产品(ConcreteProduct)_1 : RedPenCore.java
public class RedPenCore extends PenCore{ RedPenCore(){ color="红色"; } public void writeWord(String s){ System.out.println("写出"+color+"的字:"+s); } }
具体产品(ConcreteProduct)_2 : BluePenCore.java
public class BluePenCore extends PenCore{ BluePenCore(){ color="蓝色"; } public void writeWord(String s){ System.out.println("写出"+color+"的字:"+s); } }
具体产品(ConcreteProduct)_3: BlackPenCore.java
public class BlackPenCore extends PenCore{ BlackPenCore(){ color="黑色"; } public void writeWord(String s){ System.out.println("写出"+color+"的字:"+s); } }
3.构造者(Creator): BallPen.java
public abstract class BallPen{ BallPen(){ System.out.println("生产了一只装有"+getPenCore().color+"笔芯的圆珠笔"); } public abstract PenCore getPenCore(); //工厂方法 }
4.具体构造者(ConcreteCreator):
RedBallPen.java public class RedBallPen extends BallPen{ public PenCore getPenCore(){ return new RedPenCore(); } } BlueBallPen.java public class BlueBallPen extends BallPen{ public PenCore getPenCore(){ return new BluePenCore(); } } BlackBallPen.java public class BlackBallPen extends BallPen{ public PenCore getPenCore(){ return new BlackPenCore(); } }
5.应用 Application.java
public class Application{ public static void main(String args[]){ PenCore penCore; BallPen ballPen=new BlueBallPen(); penCore=ballPen.getPenCore(); penCore.writeWord("你好,很高兴认识你"); ballPen=new RedBallPen(); penCore=ballPen.getPenCore(); penCore.writeWord("How are you"); ballPen=new BlackBallPen(); penCore=ballPen.getPenCore(); penCore.writeWord("nice to meet you"); } }
总结
工厂方法模式属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品
工厂方法模式的主要优点是增加新的产品类时无须修改现有系统,并封装了产品对象的创建细节,系统具有良好的灵活性和可扩展性;其缺点在于增加新产品的同时需要增加新的工厂,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性
本文向大家介绍Java设计模式之工厂方法模式实例简析,包括了Java设计模式之工厂方法模式实例简析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java设计模式之工厂方法模式。分享给大家供大家参考,具体如下: 工厂方法模式使用的频率非常高,在我们日常的开发中总能遇见到它的身影。其定义为:Define an interface for creating an object, but let
本文向大家介绍Ruby中使用设计模式中的简单工厂模式和工厂方法模式,包括了Ruby中使用设计模式中的简单工厂模式和工厂方法模式的使用技巧和注意事项,需要的朋友参考一下 之前有看过《ruby设计模式》,不过渐渐的都忘记了。现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下。 简单工厂模式: 这样写的好处是降低耦合。 比如增加一个开根号运算的时候,只需要在工厂类中添加一个分支
本文向大家介绍Java设计模式编程中的工厂方法模式和抽象工厂模式,包括了Java设计模式编程中的工厂方法模式和抽象工厂模式的使用技巧和注意事项,需要的朋友参考一下 工厂方法模式 动机 创建一个对象往往需要复杂的过程,所以不适合包含在一个复合工厂中,当有新的产品时,需要修改这个复合的工厂,不利于扩展。 而且,有些对象的创建可以需要用到复合工厂访问不到的信息,所以,定义一个工厂接口,通过实现这个接口来
工厂方法(Factory Method) Intent 定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。 Class Diagram 在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。 下图中,Factory 有一个 doSomething() 方法,这个方法需要用到一个产品对象,这个产品对象由 factoryMethod() 方法创建。
本文向大家介绍Java设计模式编程之工厂方法模式的使用,包括了Java设计模式编程之工厂方法模式的使用的使用技巧和注意事项,需要的朋友参考一下 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。 类型:创建类模式 类图: 工厂方法模式代码 工厂模式: 首先需要说一下工厂模式。工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工
本文向大家介绍java设计模式学习之工厂方法模式,包括了java设计模式学习之工厂方法模式的使用技巧和注意事项,需要的朋友参考一下 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 工厂方法模式结构图: 项目需求,创建一个雷锋工厂,大学生可以去帮助别人,志愿者也可以帮助别人做事情。 1:创建一个雷锋类,具有帮