首页 > 其他 > 详细

《大话设计模式》读书笔记

时间:2018-11-18 12:50:03      阅读:160      评论:0      收藏:0      [点我收藏+]

一、简单工厂模式

1.面向对象三大基本特性:封装、继承、多态

封装:封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。该逻辑单元负责将所描述的属性隐藏起来,外界对客体内部属性的所有访问只能通过提供的用户接口实现。这样做既可以实现对客体属性的保护作用,又可以提高软件系统的可维护性。只要用户接口不改变,任何封装体内部的改变都不会对软件系统的其他部分造成影响。

继承:继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

多态:多态的基础是继承。多态下,子类重写父类的方法,实际使用过程中,用父类引用变量指向子类对象,此时父类引用调用的是子类重写后的方法,由于是父类引用变量,所有无法调用子类特有的方法。如果想调用子类特有的方法,必须强制类型转换到子类。

class Person {
    public void speak() {
        System.out.println("person");
    }
}

class Chinese extends Person {
    @Override
    public void speak() {
        System.out.println("Chinese");
    }

    public void chinaNo1() {
        System.out.println("chinaNo1");
    }
}

class English extends Person {
    @Override
    public void speak() {
        System.out.println("English");
    }
}

public class SimpleFactory {
    public static void main(String args[]) {
        Person person1 = new Chinese();
        Person person2 = new English();
        person1.speak();
        person2.speak();
        //person1.chinaNo1(); 多态下父类引用变量无法直接调用子类特有的方法
        Chinese chinese = (Chinese) person1;
        chinese.chinaNo1();
    }

}

2.简单工厂模式

import java.util.Scanner;

class Operation {
    private double numberOne = 0;
    private double numberTwo = 0;

    public double getNumberOne() {
        return numberOne;
    }

    public void setNumberOne(double numberOne) {
        this.numberOne = numberOne;
    }

    public double getNumberTwo() {
        return numberTwo;
    }

    public void setNumberTwo(double numberTwo) {
        this.numberTwo = numberTwo;
    }

    public double getResult() throws Exception {
        double result = 0;
        return result;
    }
}

class OperationAdd extends Operation {
    @Override
    public double getResult() {
        return getNumberOne() + getNumberTwo();
    }
}

class OperationSub extends Operation {
    @Override
    public double getResult() {
        return getNumberOne() - getNumberTwo();
    }
}

class OperationMul extends Operation {
    @Override
    public double getResult() {
        return getNumberOne() * getNumberTwo();
    }
}

class OperationDiv extends Operation {
    @Override
    public double getResult() throws Exception {
        if (getNumberTwo() == 0) {
            throw new Exception("除数不能为0");
        }
        return getNumberOne() / getNumberTwo();
    }
}

class OperationFactory {
    public static Operation createOperation(char operation) throws Exception {
        switch (operation) {
            case ‘+‘: {
                return new OperationAdd();
            }
            case ‘-‘: {
                return new OperationSub();
            }
            case ‘*‘: {
                return new OperationMul();
            }
            case ‘/‘: {
                return new OperationDiv();
            }
            default: {
                throw new Exception("不支持的计算类型");
            }
        }
    }
}

public class SimpleFactory {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        double number1 = sc.nextDouble();
        System.out.println(number1);
        char op = sc.next().charAt(0);
        System.out.println(op);
        double number2 = sc.nextDouble();
        System.out.println(number2);
        Operation operation = null;
        try {
            operation = OperationFactory.createOperation(op);
        } catch (Exception e) {
            e.printStackTrace();
        }
        operation.setNumberOne(number1);
        operation.setNumberTwo(number2);
        try {
            System.out.println(operation.getResult());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

 3.UML类图

 

《大话设计模式》读书笔记

原文:https://www.cnblogs.com/yfzhou/p/9976001.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!