您的位置:首页 > 其它

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

2016-07-17 16:21 302 查看
简单工厂模式又叫静态工厂模式(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查看:点击此处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息