设计模式笔记(3)--抽象工厂模式

抽象工厂模式

修改上讲的代码

public interface IFactory{
    BreadMaker CreateBread();
    PizzaMaker CreatePizza();
}

public class BlackBreadFactory implements IFactory
{
    @override
    public BreadMaker CreateBread()
    { 
        return new BlackBread();
    }
    @override
    public PizzaMaker CreatePizza()
    {
        return new BlackPizza();
    }
}

public class HoneyBreadFactory implements IFactory
{
    @override
    public BreadMaker CreateBread()
    { 
        return new HoneyBread();
    }
    
    @override
    public PizzaMaker CreatePizza()
    {
        return new HoneyPizza();
    }
}

public class WhiteBreadFactory implements IFactory
{
    @override
    public BreadMaker CreateBread()
    { 
        return new WhiteBread();
    }
    @override
    public PizzaMaker CreatePizza()
    {
        return new WhitePizza();
    }
}

GOF对于抽象工厂模式的定义是:“提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类”

抽象工厂模式适用于以下情况

  1. 一系列要独立于它的产品的创建,组合和表示时
  2. 一个系统要由多个产品系列中的一个来配置时
  3. 当强调一些列相关的产品对象的设计以便进行联合使用时
  4. 当要提供一个产品类库,而只要显示它们的接口而不是实现时。

反射技术

public static void main(String[] args){
    try
    {
        Class c = Class.forName("WhiteBreadFactory");
        try{
            breadFactory = (IFactory)c.newInstance();
            pizzaMaker = breadFactory.CreatePizza();
            pizzaMaker.GetPizza();
        }
        catch(Exception e){}
    }
    catch(ClassNotFoundException e)
    {
    }
}

可以根据用户的输入来改变字符串变量而达到实例化不同类的目的。
可以使用配置文件的方式,使得在编译后仍然可以改变具体要实例化哪个类。
反射技术可以避免if和switch使用的缺点,使程序的灵活性有了大幅度的提升。

高内聚低耦合

你可能感兴趣的:(设计模式笔记(3)--抽象工厂模式)