代码改变世界

AbstractFactory抽象工厂设计模式

2009-06-26 18:20  Peter Yao  阅读(347)  评论(4编辑  收藏  举报

相必大家对设计模式听得比较多,可是究竟怎么运用可能大家还有点糊涂!

其实我认为gof23中设计模式就是4种,:第一种:接口作为参数传递,是传递实现了这个接口的对象

                                                    第二种:接口作为参数返回是返回这个接口的对象

                                                    第三种:抽象类作为参数传递是传递实现了这个抽象类的对象

                                                    第四种:抽象类作为参数返回是返回这个抽象类的对象

好了,不多说了,进行我们的第一种设计模式:抽象工厂模式:

 

需求图片说明:

 

AbstractFactory
public interface IAnimalFactory {

    ICat createCat();
	
    IDog createDog();
}

ConcreteFactory
public class BlackAnimalFactory implements IAnimalFactory {

    public ICat createCat() {
        return new BlackCat();
    }

    public IDog createDog() {
        return new BlackDog();
    }

}
public class WhiteAnimalFactory implements IAnimalFactory {

    public ICat createCat() {
        return new WhiteCat();
    }

    public IDog createDog() {
        return new WhiteDog();
    }

}

AbstractProduct
public interface ICat {

    void eat();
}
public interface IDog {

    void eat();
}

ConcreteProduct
public class BlackCat implements ICat {

    public void eat() {
        System.out.println("The black cat is eating!");
    }

}
public class WhiteCat implements ICat {

    public void eat() {
        System.out.println("The white cat is eating!");
    }

}
public class BlackDog implements IDog {

    public void eat() {
        System.out.println("The black dog is eating");
    }

}
public class WhiteDog implements IDog {

    public void eat() {
        System.out.println("The white dog is eating!");
    }

}

Client
public static void main(String[] args) {
    IAnimalFactory blackAnimalFactory = new BlackAnimalFactory();
    ICat blackCat = blackAnimalFactory.createCat();
    blackCat.eat();
    IDog blackDog = blackAnimalFactory.createDog();
    blackDog.eat();
    
    IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();
    ICat whiteCat = whiteAnimalFactory.createCat();
    whiteCat.eat();
    IDog whiteDog = whiteAnimalFactory.createDog();
    whiteDog.eat();
}

result
The black cat is eating!
The black dog is eating!
The white cat is eating!
The white dog is eating!