java设计模式(2)

工厂模式定义

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

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

普通工厂模式

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

具体代码如下:

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();
        }

}

其他类代码不变

原文地址:https://www.cnblogs.com/gaoss/p/6617397.html