工厂模式

来源:互联网 发布:java adb命令 编辑:程序博客网 时间:2024/05/16 14:53

工厂模式定义

在面向对象程序设计中,工厂通常是用来创建其他对象的对象,工产模式根据不同的参数来实现不同的分配方案和创建对象。

在工产模式中,我们创建对象时不会对客户端暴露创建逻辑,而且是通过使用一个共同的接口来指向新创建的对象。
工厂模式通常分为:
普通工厂模式
多个工厂方法模式
静态工厂方法模式

普通工厂模式

例如用工厂模式创建人。先创建一个男人,他每天都“吃饭、睡觉、打豆豆”,然后我们再创建一个女人,她每天也“吃饭、睡觉、打豆豆”。
代码结构如下图
这里写图片描述

具体代码如下:

public interface Human {    public void eat();    public void sleep();    public void beat();}
public class Male implements Human {    @Override    public void eat() {        // TODO Auto-generated method stub        System.out.println("Male can eat");    }    @Override    public void sleep() {        // TODO Auto-generated method stub        System.out.println("Male can sleep");    }    @Override    public void beat() {        // TODO Auto-generated method stub        System.out.println("Male can beat");    }}
public class female implements Human {    @Override    public void eat() {        // TODO Auto-generated method stub        System.out.println("Female can eat");    }    @Override    public void sleep() {        // TODO Auto-generated method stub        System.out.println("Female can sleep");    }    @Override    public void beat() {        // TODO Auto-generated method stub        System.out.println("Female can beat");    }}
public class FactoryTest {    public static void main(String[] args){        HumanFactory factory =new HumanFactory();        Human male = factory.createHuman("male");        male.eat();        male.sleep();        male.beat();    }}
public class HumanFactory {    public Human createHuman(String gender){        if(gender.equals("male")){            return new Male();        }else if(gender.equals("female")){            return new female();        }else{            System.out.println("sorry");            return null;        }    }}

运行结果如下:
Male can eat
Male can sleep
Male can beat

多个工厂方法模式

多个工厂模式就是提供多个方法,分别创建对象。

public class HumanFactory {        public Male createMale(){            return new Male();        }        public female createfemale(){            return new female();        }}

其他类代码都不变

静态工厂方法模式

public class HumanFactory {        public static Male createMale(){            return new Male();        }        public static female createfemale(){            return new female();        }}

其他类代码不变

0 0