简单工程模式

来源:互联网 发布:阿里云邮箱地址前缀 编辑:程序博客网 时间:2024/06/06 23:50
    工厂模式是常用的实例化对象的模式,是使用工程方法替代new操作的一种模式。工厂模式主要是为来创建对象提供过渡接口,以便更好的封装对象的实例化过程,降低模块之间的耦合程度。
    工厂模式可以分为三类。简单工厂模式、工厂方法模式、抽象工厂模式。三种模式抽象程度逐步提高。
    本章主要讨论以下简单的工厂模式,简单工厂模式又可以看作为静态工厂模式,可以理解为一个创建特定对象的工具类。
简单工厂模式的组成:
  1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品
         2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。         
         3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
    类图如下:



    代码示例:

下面通过简单的代码来说明下简单工程

1)创建产品接口

package myThink;/** * Created by fengxinzi on 17-12-12. *//** * 抽象产品类,用来定义产品的公共方法 */public interface Person {    void eat ();    void say();}

2)创建产品1和产品2 对应Woman Man

package myThink;/** * Created by fengxinzi on 17-12-12. *//** * 具体产品类,实现Persion接口。 */public class Woman implements Person{    @Override    public void eat() {        System.out.println("Womon Eat");    }    @Override    public void say() {        System.out.println("Womon Say");    }}

package myThink;/** * Created by fengxinzi on 17-12-12. *//** * 具体产品Man类,实现Person接口 */public class Man implements Person {    @Override    public void eat() {        System.out.println("Man eat");    }    @Override    public void say() {        System.out.println("Man say");    }}

3)创建工程方法

package myThink;/** * Created by fengxinzi on 17-12-12. */public class PersonFactory {    private static Person person = null;    private static Woman woman= null;    private static Man man= null;    public static Person getInstance(String whichOne){        if("W".equals(whichOne)){            if(woman == null){                person = new Woman();            }else{                person = woman;            }        }        if("M".equals(whichOne)){            if(man == null){                person = new Man();            }else{                person = man;            }        }        return person;    }}

4)创建模拟业务逻辑使用工程类实例化具体产品的过程。

package myThink;import org.junit.Test;/** * Created by fengxinzi on 17-12-12. */public class FactoryTest {    @Test    public void testFactory(){        Person w = PersonFactory.getInstance("W");        w.eat();        Person m = PersonFactory.getInstance("M");        m.say();    }}

5)输出如下

Womon Eat
Man say


Process finished with exit code 0