设计模式-抽象工厂模式

###抽象工厂模式 抽象工厂模式类图设计

####抽象工厂模式优势:code

  • 抽象工厂模式隔离了具体类的生产,使得客户并不须要知道什么被建立。对象

  • 当一个产品族中的多个对象被设计成一块儿工做时,它能保证客户端始终只使用同一个产品族中的对象。产品

  • 增长新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。ast

####抽象工厂模式缺点:class

  • 增长新的产品等级结构很复杂,须要修改抽象工厂和全部的具体工厂类,对“开闭原则”的支持呈现倾斜性。

####代码实现im

//早餐工厂
public interface BreakfastFactory {
    Food makeFood();
    Drink makeDrink();
}

//饮料工厂
public interface Drink {
	void drink();
}

//实现类
public class EastDrink implements Drink {
    public void drink() {
        System.out.println("喝豆浆");
    }
}

public class WestDrink implements Drink {
    public void drink() {
        System.out.println("喝牛奶");
    }
}

//主食工厂
public interface Food {
	void eat();
}

//实现类
public class EastFood implements Food {
    public void eat() {
        System.out.println("吃油条");
    }
}

public class WestFood implements Food {
    public void eat() {
        System.out.println("吃面包");
    }
}

//早餐工厂实现类(中式早餐)
public class EastBreakfast implements BreakfastFactory {
    public Food makeFood() {
        return new EastFood();
    }

    public Drink makeDrink() {
        return new EastDrink();
    }
}

//西式早餐
public class WestBreakfast implements BreakfastFactory {
    public Food makeFood() {
        return new WestFood();
    }

    public Drink makeDrink() {
        return new WestDrink();
    }
}

public class Client {
    public static void main(String[] args) {
        System.out.println("**********第一天吃西餐***********");
        BreakfastFactory breakfast = new WestBreakfast();
        breakfast.makeDrink().drink();
        breakfast.makeFood().eat();
        System.out.println("**********第一天吃中餐***********");
        breakfast = new EastBreakfast();
        breakfast.makeDrink().drink();
        breakfast.makeFood().eat();
    }
}

运行结果:
**********第一天吃西餐***********
喝牛奶
吃面包
**********第一天吃中餐***********
喝豆浆
吃油条

####根据代码优缺点分析客户端

优势项目

若是咱们想是一个中西式的早餐,好比:喝牛奶吃油条,这个很容易实现,咱们只须要一个实现早餐工厂的类,即可以建立牛奶喝油条。static

缺点 若是咱们又想添加一个饭后项目,好比西方饭前祷告,中方饭前祝酒,这样就得添加一个饭前的工厂,这样的话须要修改早餐工厂和其具体的实现类(西式早餐喝中式早餐)

相关文章
相关标签/搜索