设计模式-创建型-简单工厂模式(Static Factory)

来源:互联网 发布:楚天数控编程代码 编辑:程序博客网 时间:2024/05/19 09:36

简单工厂模式又叫静态工厂模式(Static Factory )(不属于23种GOF设计模式)

工厂角色:工厂角色负责产品的生产工作。在简单工厂模式中,工厂类是一个具体的实现类,在系统设计中工厂类负责实际对象的创建工作

     工厂类(Factory)的特点是:它知道系统中都存在哪些能够创建对象的具体类(ConcreteProduct),也知道该如何将创建的对象,以某种能够屏蔽具体类实现细节的方式(AbstractProduct)提供给所需要的其他角色来使用该对象提供的数据和服务

抽象产品角色:抽象产品角色是具体的产品的抽象。抽象就是将产品的共性抽取出来,可以直接暴露给客户端(需要使用具体产品的角色),对所有的客户端来说,从工厂中直接获取到的原始产品的外部形态都是相同的,没有任何的差别,包括数据和服务。这也就是说,具体客户端应该“秘密”掌握着某一个或一些具体产品的详细资料(具体产品类型、数据和服务),然后根据具体客户端(任何一个需要使用某种具体产品的数据和服务的实现类)需要什么样的附加数据和服务,进行类类型转换后,通过借助于对应的具体产品对象来完成其职责

       抽象产品角色,在实际系统中可以定义为接口或者抽象类

具体产品角色:具体产品实现类一定是抽象产品类的实现或扩展。为了保证工厂类能够创建对象,工厂类需要知道具体产品的创建方式,这就涉及到具体产品类所提供的构造方法,以便,可能工厂类会向客户端提供具体创建服务所需要的数据。例如:某个产品类需要通过一个账号才能构造其实例,所以工厂类必须根据它的创建需求,为客户端提供一个带账号参数的生产方法,才能创建该具体产品类的对象

类图

简单工厂模式

package com.vapy.creator.StaticFactory;/** *  * @author vapy *  * 运动员 * */public interface Athlete {             public void run();      public void jump();  }  
package com.vapy.creator.StaticFactory;/** *  * @author vapy *  * 足球运动员 * */public class FootballPlayer implements Athlete {    @Override    public void run() {        System.out.println("Football player run!");    }    @Override    public void jump() {        System.out.println("Football player jump!");    }}
package com.vapy.creator.StaticFactory;/** *  * @author vapy *  * 运动员协会 * */public class AthleticAssociation {    public static Athlete registeredFootballPlayer() {        return new FootballPlayer();    }}
package com.vapy.creator.StaticFactory;/** *  * @author vapy * */public class Client {    private static Athlete goalkeeper;    private static Athlete guard;    public static void main(String[] args) {        guard = AthleticAssociation.registeredFootballPlayer();        goalkeeper = AthleticAssociation.registeredFootballPlayer();        goalkeeper.run();        guard.jump();    }}

简单工厂模式结果
本文代码可在github查看:点击此处

6 0