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年10月14日 10:46
  • 10KB
  • 下载

java设计模式之抽象工厂模式

  • 2013年05月11日 14:46
  • 13KB
  • 下载

Java设计模式2:简单工厂模式

简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式。简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例。   为什么要使用简单工厂模式 原因很简单:解耦。 ...

java设计模式-抽象工厂模式

  • 2016年01月30日 00:17
  • 10KB
  • 下载

java设计模式-工厂模式

  • 2016年01月30日 00:16
  • 8KB
  • 下载

java设计模式2——抽象工厂模式(Abstract Factory)

工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这...

Java设计模式之工厂模式实现

  • 2013年03月19日 13:48
  • 16KB
  • 下载

java 设计模式之工厂模式

  • 2013年04月12日 14:24
  • 5KB
  • 下载

浅谈JAVA设计模式之——抽象工厂模式(AbstractFactoty)

一、定义:     提供创建对象的接口 二、为何使用     工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。       为什么...

JAVA设计模式研究之抽象工厂模式

  • 2012年07月02日 07:18
  • 255KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式之工厂模式
举报原因:
原因补充:

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