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

简单工厂模式又叫静态工厂模式(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值