关闭

java设计模式之工厂模式

230人阅读 评论(0) 收藏 举报
分类:

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

工厂模式通常分为:

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


工厂模式代码:

// 抽象产品
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 生产的苹果、刀子,苹果属于食物产品等级结构中,而刀子则属于餐具产品等级结构中。

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17931次
    • 积分:470
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:14篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论