设计模式之工厂模式

设计模式之工厂模式

什么事工厂方法模式?    

工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给抽象工厂的子类去做。

工厂方法模式如何组成?

1.抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 
2.具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。 
3.抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。 
4.具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

同样以计算器的例子来解释工厂模式

首先得有一个运算器的方法接口

package test02;

public interface Operation {
    float getResult();
}

其次分别定义加法、减法类实现该Operation接口

复制代码
package test02;

public class SumOperationImp implements Operation{

    @Override
    public float getResult() {
        float result=0;
        result = 1+1;
        return result;
        
    }
    
}
复制代码

 

复制代码
package test02;

public class SubOperationImp implements Operation{

    @Override
    public float getResult() {
        float result=0;
        result = 1-1;
        return result;
        
    }
    
}
复制代码

接着定义工厂接口用来获取运算类

package test02;

public interface IFactory {
    void getOperation();
}

再定义加法、减法的工厂类来实现该接口

复制代码
package test02;


public class SumFactory implements  test02.IFactory {

    @Override
    public Operation getOperation() {
        // TODO Auto-generated method stub
        return new SumOperationImp();
    }


}
复制代码
复制代码
package test02;

public class SubFactory implements IFactory {

    @Override
    public Operation getOperation() {
        // TODO Auto-generated method stub
        return new SubOperationImp();
    }

}
复制代码

最终我们来测试一下

复制代码
package test02;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        IFactory factory =new SubFactory();
        Operation operation =factory.getOperation();
        System.out.println(operation.getResult());
    }

}
复制代码

完毕!

 

为什么要使用工厂模式?

工厂模式克服了简单工厂模式违背开放-封闭原则的缺点,又保留了封装对象创建过程的优点。但也存在缺点,每增加一个产品就需要增加一个产品的工厂类,增加了额外的开发量。

 

初学《大话设计模式》

posted @   胖胖的半山兄  阅读(271)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示