第1章《简单工厂模式》

1、学习总结:

(1)工厂模式优点:

a、将业务逻辑和界面逻辑分离,降低两者之间的耦合性。

b、将具体的不同业务进行分离,实现业务间的松耦合。

c、用一个单独的类来决定创建哪个业务实例的过程。这就是工厂。究竟要实例化哪个业务类,将来会不会增加实例化的对象,这些都是容易变化的地方,所以适合用一个工厂来做决策。

其实,c的内容才是工厂模式的原理,但是c的实现,需要a和b已经实现的情况下才可以使用。


(2)通过工厂模式实现一个具体功能时:

如果可以用工厂来实例化的某个业务需要更改,可以直接更改对应类自己内部的内容即可,其它类不会涉及任何更改;

如果需要增加某个可以通过工厂来实例化的业务,则需要做两处修改:

a、写一个新类,只涉及自己的业务逻辑功能。

b、在工厂类里面,增加实例化这个类的代码。


2、手动模拟书上的案例:实现一个计算器,可以完成加减乘除运算。

包括的7个类:

client类:客户端代码

Operation类:定义操作数和获取操作结果的虚方法。

OperationAdd类:加操作,继承自Operation

OperationSubs类:减操作,继承自Operation

OperationMul类:乘操作,继承自Operation

OperationDevide 类:除操作,继承自Operation

OperationFactory类:工厂类,用于实例化一个具体的操作类。


(1)Client

package designmodel.firstchapter;

/**
 * @Author: cxh
 * @CreateTime: 17/12/31 17:53
 * @ProjectName: JavaBaseTest
 */
public class Client {
    //客户端代码
    public static void main(String[] args) {
        //定义一种操作
        Operation ope=OperationFactory.createOperation("+");
        //定义两个操作数
        ope.setFirst(11);
        ope.setSecond(22);
        //输出计算结果
        System.out.println(ope.getResult());
    }
}


(2)Operation

package designmodel.firstchapter;

/**
 * @Author: cxh
 * @CreateTime: 17/12/31 17:51
 * @ProjectName: JavaBaseTest
 */
public class Operation {
    private int first;
    private int second;

    //get and set
    public int getFirst() {
        return first;
    }

    public void setFirst(int first) {
        this.first = first;
    }

    public int getSecond() {
        return second;
    }

    public void setSecond(int second) {
        this.second = second;
    }

    //求运算结果
    public int getResult(){
        return 0;
    }
}


(3)OperationAdd

package designmodel.firstchapter;

/**
 * @Author: cxh
 * @CreateTime: 17/12/31 17:57
 * @ProjectName: JavaBaseTest
 */
public class OperationAdd extends Operation {

    @Override
    public int getResult(){
        return super.getFirst()+super.getSecond();
    }

    @Override
    public void setFirst(int first) {
        super.setFirst(first);
    }
    @Override
    public void setSecond(int second) {
        super.setSecond(second);
    }
}


(4)OperationSubs

package designmodel.firstchapter;

/**
 * @Author: cxh
 * @CreateTime: 17/12/31 18:04
 * @ProjectName: JavaBaseTest
 */
public class OperationSubs extends Operation {

    @Override
    public int getResult() {
       return super.getFirst()-super.getSecond();
    }

    @Override
    public void setFirst(int first) {
        super.setFirst(first);
    }

    @Override
    public void setSecond(int second) {
        super.setSecond(second);
    }
}


(5)OperationMul

package designmodel.firstchapter;

/**
 * @Author: cxh
 * @CreateTime: 17/12/31 18:16
 * @ProjectName: JavaBaseTest
 */
public class OperationMul extends Operation {

    @Override
    public int getResult() {
        return super.getFirst()*super.getSecond();
    }

    @Override
    public void setFirst(int first) {
        super.setFirst(first);
    }

    @Override
    public void setSecond(int second) {
        super.setSecond(second);
    }
}


(6)OperationDevide

package designmodel.firstchapter;

/**
 * @Author: cxh
 * @CreateTime: 17/12/31 18:28
 * @ProjectName: JavaBaseTest
 */
public class OperationDevide extends Operation {
    @Override
    public int getResult() {
        try{
            return super.getFirst()/super.getSecond();
        }catch (Exception e){
            System.out.println("错误信息列表:"+e);
            return -1;
        }
    }

    @Override
    public void setFirst(int first) {
        super.setFirst(first);
    }

    @Override
    public void setSecond(int second) {
        super.setSecond(second);
    }
}


(7)OperationFactory

package designmodel.firstchapter;

/**
 * @Author: cxh
 * @CreateTime: 17/12/31 17:50
 * @ProjectName: JavaBaseTest
 */
public class OperationFactory {
    public static Operation createOperation(String s){
        switch (s){
            case "+":
                return new OperationAdd();
            case "-":
                return new OperationSubs();
            case "*":
                return new OperationMul();
            case "/":
                return new OperationDevide();
        }
        return null;
    }
}

输出结果:33


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值