您的位置:首页 > 其它

设计模式--简单工厂模式

2017-07-07 10:57 169 查看
面对可能的变化,通过创建工厂来创建不同的对象来实现很多功能的切换,不用在业务代码中切换。

1

接口:

public interface Output {
public void print();
}


两个实现类

public class OutputImpl implements Output{
@Override
public void print() {
System.out.println("OutputImpl->print");
}
}


public class BetterOutputImpl implements Output {
@Override
public void print() {
System.out.println("BetterOutputImpl-->Output");
}
}


对象工厂创建指定类型的对对象来切换不同的功能:

public class SimpleFactory {
public static Output getOutputInstance(String type) {
if ("BetterOutputImpl".equals(type)) {
return new BetterOutputImpl();
} else {
return new OutputImpl();
}
}
}


测试

public class TextMain {

private Output output;

public TextMain(Output output) {
this.output = output;
}

public void print(){
output.print();
}

public static void main(String[] args) {
Output output=SimpleFactory.getOutputInstance("BetterOutputImpl");
TextMain textMain=new TextMain(output);
textMain.print();
}
}


通过简单工厂模式,通过实现接口,创建一个工厂类中的对应的方法,返回不同接口的实现类的对象,调用处接口引用指向不同的实现类的对象,从而实现调用者和对象创建过程的分离,实现解耦,而使用接口的意义在于,当系统重构时,因为均继承一个接口,产生的对象均可被指向。

参考:李刚《疯狂java讲义》第三版。

2 参考《大话设计模式》。在一的基础上引入的抽象类,对于抽象与接口的理解又更深了。

整体架构图:



接口:

public interface Operation {
public Integer getResult();
}


抽象类:

public abstract class AbstractOperation implements Operation{

public Integer numberA=0;

public Integer numberB=0;

public abstract Integer getResult();
//省略get set方法
}


四个实现类:

public class OperationAdd extends AbstractOperation{
public Integer getResult(){
return numberA+numberB;
}
}
public class OperationDiv extends AbstractOperation {
@Override
public Integer getResult() {
// TODO Auto-generated method stub
return numberA/numberB;
}
}
public class OperationMul extends AbstractOperation {
@Override
public Integer getResult() {
// TODO Auto-generated method stub
return numberA*numberB;
}
}
public class OperationSub extends AbstractOperation {
@Override
public Integer getResult() {
// TODO Auto-generated method stub
return numberA-numberB;
}
}


测试:

public static void main(String[] args) {
// TODO Auto-generated method stub
AbstractOperation operation=OperationFactory.createOperation("+");
operation.setNumberA(1);
operation.setNumberB(2);
System.out.println(operation.getResult());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: