设计模式(四)——抽象工厂模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dream_Ryoma/article/details/82866265

前面说了两种设计模式,简单工厂模式和工厂模式。简单工厂模式是定义一个工厂类,工厂类根据调用时传入的参数选择创建哪一个类的实例。工厂模式是为每个类创建一个工厂,而这些工厂都实现了同一个工厂,客户端在调用的时候自己选择某个类对应的工厂去创建某个类的实例。那抽象工厂又是什么呢?抽象工厂在工厂模式的基础上引入了“产品族”的概念。

代码如下(鼠标和键盘是一个产品族):

先定义鼠标接口和键盘接口:

package AbstractFactoryPattern;
/**
 * 鼠标
 */
public interface Mouse {
    
    //鼠标点击
    public void click();
    
}


package AbstractFactoryPattern;
/**
 * 键盘
 */
public interface KeyBoard {
    
    //键盘点击
    public void click();
    
}

定义戴尔鼠标和键盘:

package AbstractFactoryPattern;

/**
 * 戴尔鼠标
 */
public class DellMouse implements Mouse{

    @Override
    public void click() {
        // TODO Auto-generated method stub
        System.out.println("click DellMouse ...");
    }

}


package AbstractFactoryPattern;
/**
 * 戴尔键盘
 */
public class DellKeyBoard implements KeyBoard{

    @Override
    public void click() {
        // TODO Auto-generated method stub
        System.out.println("click DellKeyBoard ...");
    }

}

定义惠普鼠标和键盘:

package AbstractFactoryPattern;

/**
 * 惠普鼠标
 */
public class HPMouse implements Mouse{

    @Override
    public void click() {
        // TODO Auto-generated method stub
        System.out.println("click HPMouse ...");
    }

}


package AbstractFactoryPattern;
/**
 * 惠普键盘
 */
public class HPKeyBoard implements KeyBoard{

    @Override
    public void click() {
        // TODO Auto-generated method stub
        System.out.println("click HPKeyBoard ...");
    }

}

定义抽象工厂:

package AbstractFactoryPattern;

public abstract class Factory {

    //生产鼠标
    public abstract Mouse createMouse();
    
    //生产键盘
    public abstract KeyBoard createKeyBoard();
    
}

定义惠普工厂和戴尔工厂:

package AbstractFactoryPattern;
/**
 * 惠普工厂
 */
public class HPFactory extends Factory{

    @Override
    public Mouse createMouse() {
        // TODO Auto-generated method stub
        return new HPMouse();
    }

    @Override
    public KeyBoard createKeyBoard() {
        // TODO Auto-generated method stub
        return new HPKeyBoard();
    }

}

package AbstractFactoryPattern;
/**
 * 戴尔工厂
 */
public class DellFactory extends Factory{

    @Override
    public Mouse createMouse() {
        // TODO Auto-generated method stub
        return new DellMouse();
    }

    @Override
    public KeyBoard createKeyBoard() {
        // TODO Auto-generated method stub
        return new DellKeyBoard();
    }

}

运行测试类:

package AbstractFactoryPattern;

public class RunDemp {
    
    public static void main(String[] args) {
        
        Factory hpFactory = new HPFactory();
        Mouse hpMouse = hpFactory.createMouse();
        hpMouse.click();
        KeyBoard hpKeyBoard = hpFactory.createKeyBoard();
        hpKeyBoard.click();
        
    }
    
}

执行结果:

参考文档:设计模式|菜鸟教程,《设计模式之禅》

上一篇:设计模式(三)——工厂模式

下一篇:设计模式(五)——单例模式

猜你喜欢

转载自blog.csdn.net/Dream_Ryoma/article/details/82866265
今日推荐