请输入数字A : 8 请输入操作符(+,-,*,/): / 请输入数字B : 3 输出结果为:2.6666666666666665 请输入数字A : 8 请输入操作符(+,-,*,/): / 请输入数字B : 0 java.lang.Exception: 除数不能为0 输出结果为:0.0 at operation.NumberDiv.getResult(NumberDiv.java:16) at operation.Program.main(Program.java:24)
但这时,如果客户需求,需要增加求M的N次方的运算,在简单工厂里,就是先增加”求M得N次方“的类,然后去更改工厂方法,
增加Case语句来判断,但这时岂不是修改了原来的类,违背了开放--封闭原则,,,
那么这时就要考虑工厂方法模式了,,
TWO-----工厂方法模式
一,基本知识:
(1)定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
如下图:

(2)英文:Factory Method
二,四个要素:
工厂接口:工厂接口是工厂方法模式的核心,与调用者直接交互用来提品。在实际编程中,有时候也会使用一个抽象类来作为与调用者交互的接口,其本质上是一样的。
工厂实现:在编程中,工厂实现决定如何实例化产品,是实现扩展的途径,需要有多少种产品,就需要有多少个具体的工厂实现。
产品接口:产品接口的主要目的是定义产品的规范,所有的产品实现都必须遵循产品接口定义的规范。产品接口是调用者最为关心的,产品接口定义的优劣直接决定了调用者代码的稳定性。简单工厂模式同样,产品接口也可以用抽象类来代替,但要注意最好不要违反里氏替换原则。
产品实现:实现产品接口的具体类,决定了产品在客户端中的具体行为。
三,优点:创建对象的接口,让子类去决定具体实例化的对象,把简单的内部逻辑判断移到了客户端代码。工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。
四,理解:如下图,上面那个例子可这样改:
利用依赖倒置原则,把工厂类抽象出一个接口,里面只有一个创建抽象产品的方法,然后所有的要生成具体类的工厂去实现这个接口,这样:
一个简单工程模式的工厂类就变成了一个工厂抽象接口和多个具体生成对象的工厂,当我们需要增加例如M的N次方时,就不需要去修改原有的工厂类,只需要增加此功能的运算类和相应的工程类即可。简单工厂模式如上图所示。
下面以一个学雷锋的例子:
雷锋类:
class LeiFeng {
public void Sweep(){
System.out.println("扫地");
}
public void Wash(){
System.out.println("洗衣服");
}
public void BuyRice(){
System.out.println("买米");
}
}
工厂接口:
intece IFactory {
LeiFeng createLeiFeng();
}
大学生工厂:
public class UndergraduateFactory implements IFactory{
@Override
public LeiFeng createLeiFeng() {
return new Undergraduate();
}
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23612-3.html
每年只创新广告就行了
芝麻糊里面都是密封包装