java设计模式之工厂模式

转载 2015年07月09日 16:05:30

内容来自实验楼,记录下来供自己学习。

工厂模式通常分为:

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式


工厂模式代码:

// 抽象产品
abstract class Human {
    public abstract void Eat();
    public abstract void Sleep();
    public abstract void Beat();
}

// 具体产品-男人
class Man extends Human{
    public void Eat() {
        System.out.println("Man can eat.");        
    }

    public void Sleep() {
        System.out.println("Man can sleep.");
    }

    public void Beat() {
        System.out.println("Man can beat doudou.");        
    }

}

// 具体产品-女人
class Female extends Human{

    public void Eat() {
        System.out.println("Female can eat.");   
    }

    public void Sleep() {
        System.out.println("Female can sleep.");
    }

    public void Beat() {
        System.out.println("Female can beat doudou.");        
    }

}

// 简单工厂
public class HumanFactory {
    public static Human createHuman(String gender){
        Human human = null;
        if( gender.equals("man") ){
            human = new Man();
        }else if( gender.equals("female")){
            human = new Female();
        }

        return human;
    }
}

// 女娲造人
public class Goddess {  
    public static void main(String[] args) throws IOException {  
        // 造个男人  
        Human human = HumanFactory.createHuman("man");  
        human.Eat();
        human.Sleep();
        human.Beat();
    } 
}


工厂方法模式:

// 抽象产品
abstract class Human {
    public abstract void Eat();
    public abstract void Sleep();
    public abstract void Beat();
}

// 具体产品-男人
class Man extends Human {
    public void Eat() {
        System.out.println("Man can eat.");        
    }

    public void Sleep() {
        System.out.println("Man can sleep.");
    }

    public void Beat() {
        System.out.println("Man can beat doudou.");        
    }

}

// 具体产品-女人
class Female extends Human{

    public void Eat() {
        System.out.println("Female can eat.");   
    }

    public void Sleep() {
        System.out.println("Female can sleep.");
    }

    public void Beat() {
        System.out.println("Female can beat doudou.");        
    }

}

// 简单工厂变为了抽象工厂
abstract class HumanFactory {
    public abstract Human createHuman(String gender) throws IOException;
}

// 具体工厂(每个具体工厂负责一个具体产品)  
class ManFactory extends HumanFactory{  
    public Human createHuman(String gender) throws IOException {  
        return new Man();  
    }  
}  
class FemaleFactory extends HumanFactory{  
    public Human createHuman(String gender) throws IOException {  
        return new Female();  
    }  
}  

// 女娲造人
public class Goddess {  

    public static void main(String[] args) throws IOException {  
        // 造个男人  
        HumanFactory hf = new ManFactory();
        Human h = hf.createHuman("man");
        h.Eat();
        h.Sleep();
        h.Beat();
    } 
}

抽象方法模式:

// 抽象产品
abstract class Human {
    public abstract void Eat();
    public abstract void Sleep();
    public abstract void Beat();
}

// 具体产品-男人
class Man extends Human {
    public void Eat() {
        System.out.println("Man can eat.");        
    }

    public void Sleep() {
        System.out.println("Man can sleep.");
    }

    public void Beat() {
        System.out.println("Man can beat doudou.");        
    }

}

// 具体产品-女人
class Female extends Human{

    public void Eat() {
        System.out.println("Female can eat.");   
    }

    public void Sleep() {
        System.out.println("Female can sleep.");
    }

    public void Beat() {
        System.out.println("Female can beat doudou.");        
    }

}

// 简单工厂变为了抽象工厂
abstract class HumanFactory {
    public abstract Human createHuman(String gender) throws IOException;
}

// 具体工厂(每个具体工厂负责一个具体产品)  
class ManFactory extends HumanFactory{  
    public Human createHuman(String gender) throws IOException {  
        return new Man();  
    }  
}  
class FemaleFactory extends HumanFactory{  
    public Human createHuman(String gender) throws IOException {  
        return new Female();  
    }  
}  

// 女娲造人
public class Goddess {  

    public static void main(String[] args) throws IOException {  
        // 造个男人  
        HumanFactory hf = new ManFactory();
        Human h = hf.createHuman("man");
        h.Eat();
        h.Sleep();
        h.Beat();
    } 
}

工厂方法模式,抽象工厂模式区别

  • 产品等级结构:比如一个抽象类是食物,其子类有苹果、牛奶等等,则抽象食物与具体食物名称之间构成了一个产品等级结构。食物是抽象的父类,而具体的食物名称是其子类。

  • 产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品。如 AKitchen 生产的苹果、刀子,苹果属于食物产品等级结构中,而刀子则属于餐具产品等级结构中。

工厂方法模式:针对一个产品等级结构

抽象工厂模式:针对多个产品等级结构

相关文章推荐

JAVA设计模式之工厂模式

  • 2014-08-20 08:49
  • 87KB
  • 下载

java设计模式之工厂模式

什么设计模式? 设计模式是对开发经验的总结,提炼。提高代码可重用性,可靠性。也是现实世界解决问题的一些方式的程序映射。 设计模式是基于面向对象的程序设计,而面向对象也是映射自现实世界构成的思想。 面向...

java设计模式中的工厂模式

工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。 工厂模式的形态 工厂模式主要用一下几种形态: 1:简单工厂(Simple Factory)。 2:工厂方法(Facto...

JAVA学习.设计模式之工厂模式

工厂模式(factory pattern)          在现实生活中,我们一般无须了解某个产品的组装过程,而只需要向商家或者工厂,以文字的形式,说明你所需要的产品,在交付了对应的费用后,对方将直...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)