灵寿网站建设宁波新亚建设内部网站

当前位置: 首页 > news >正文

灵寿网站建设,宁波新亚建设内部网站,南昌网站设计公司,公共资源交易中心是事业单位吗万丈高楼平地起#xff0c;7种模式打地基#xff0c;模式是一种规范#xff0c;我们应该站在巨人的肩膀上越看越远#xff0c;接下来#xff0c;让我们去仔细了解了解面向对象的7种设计模式7种设计模式设计原则的核心思想#xff1a;找出应用中可能需要变化之… 万丈高楼平地起7种模式打地基模式是一种规范我们应该站在巨人的肩膀上越看越远接下来让我们去仔细了解了解面向对象的7种设计模式7种设计模式设计原则的核心思想找出应用中可能需要变化之处独立出来不要和不需要变化的代码混在一起针对接口编程而坏是针对实现编程为了交互对象的耦合性而设计为了使程序高内聚低耦合单一职责低耦合高内聚每一个类负责的任务很明确降低代码之间的耦合度如果代码耦合度较高动一点则要动全身当变化发生时设计或遭受到意想不到的破坏public class Run {public void run(){System.out.println(跑步);} }在Run类中只负责了Run()的功能不负责其他的功能在设计改变类的时候对整体的影响不大开闭原则适应性和灵活性 稳定性和延续性 可复用性和可维护性在软件开发的过程中随着版本的更替软件的需求会越来越多如果是修改的内容的话会很费时但是我们换个思路如果在设计模式的时候我们可以先评估出最容易发生的类然后对其进行抽象化设计当变化发生时只需要增加新的具体类来实现新的业务功能未使用开/闭原则/开闭原则引入案例/ public class CarDemo {public static void main(String[] args) {new CarFactory().createCar(1);new CarFactory().createCar(2);new CarFactory().createCar(3);//后期如果需要添加车型CarFactory需要修改代码//new CarFactory().createCar(4);//new CarFactory().createCar(5);}}/汽车工程类,专门负责造汽车/ class CarFactory{/违反了开闭原则,后期如果添加新的汽车类,则需要修改代码/public void createCar(int type){if(type1){System.out.println(造宝马汽车new Car(宝马汽车));}else if(type2){System.out.println(造奥迪汽车new Car(奥迪汽车));}else{System.out.println(造大众汽车new Car(大众汽车));}}}/* Car类 / class Car{String name;//定义了一个成员变量public Car(String name) {//有参构造函数this.name name;} }使用开/闭原则/ 开闭原则案例/ class CarDemo{public static void main(String[] args) {new CarFactory().carfactory(new BMW());new CarFactory().carfactory(new Aodi());new CarFactory().carfactory(new DaZhong());}}//创建一个CarFactory类 class CarFactory{//创建一个车辆工厂的方法void carfactory(Car car){car.createCar();} }//创建一个抽象类Car abstract class Car{//创建一个创建车辆的抽象方法public abstract void createCar(); }/ 如果想添加车辆型号的话只需要创建一个类继承Car类并实现createCar方法不用修改代码 *///继承并重写Car里的方法 class BMW extends Car{Overridepublic void createCar() {System.out.println(造宝马汽车);} }//继承并重写Car里的方法 class Aodi extends Car{Overridepublic void createCar() {System.out.println(造奥迪汽车);} }//继承并重写Car里的方法 class DaZhong extends Car{Overridepublic void createCar() {System.out.println(造大众汽车);} }//继承并重写Car里的方法 class BC extends Car{Overridepublic void createCar() {System.out.println(造奔驰汽车);Calendar.getInstance();new GregorianCalendar();} }里氏替换原则提高代码的复用性、提高代码的可扩展性 | 继承是具有侵入性的 增大了耦合性 基本概念继承必须确保超类锁拥有的性质在子类中仍然成立子类继承父类后,尽量不要重写父类的方法,可以新增扩展其他的功能.保证子类功能的正确性. 不能让功能修改后,导致程序出错 主要作用里氏替换原则是实现开闭原则的重要方式之一克服了继承中重写父类方法造成的可复用性变差的缺点功能正确的保证加强了程序的健壮性提高了程序的维护性降低需求变更时引入的风险代码演练/*里氏替换原则演示案例计算器父类 */public class CalculatorDemo{public static void main(String[] args) {System.out.println(new SuperCalculator().sum(5,5,5));}} //计算器 基类 class Calculator {//加法public int add(int a,int b){return ab;}//减法public int sub(int a,int b){return a-b;} } /*超级计算器子类 */ class SuperCalculator extends Calculator{//重写了父类加法Overridepublic int add(int a, int b) {return ab5;}//求和方法 子类新增的功能public int sum(int a,int b,int c){//调用add(),但是子类重写了父类方法,此处调用的子类方法发生了变化int result this.add(a,b);return resultc;} }没有重写父类方法时输出还是正确结果15但是重写之后却改变了值输出了错误的结果20依赖倒置都依赖于抽象让程序面向抽象类编程、面向接口编程依赖于抽象接口对抽象进行编程/依赖倒置引入案例/ public class WorkerDemo{public static void main(String[] args) {new Worker().getMessage(new DingDing());new Worker().getMessage(new WeChat());//每创建一个信息都要进行修改代码} }class Worker {public void getMessage(DingDing ding){System.out.println(ding.sendMessage());}public void getMessage(WeChat weChat){System.out.println(weChat.sendMessage());}//每添加一个信息都要进行修改代码 }//钉钉消息 class DingDing{public String sendMessage(){return 钉钉消息;} }//微信消息 class WeChat{public String sendMessage(){return 微信消息;} }/依赖倒置案例演示/ public class WorkerDemo{public static void main(String[] args) {new Worker().getMessage(new WeChat());//具有可变性有较高的适用性}}class Worker {public void getMessage(Message message){System.out.println(message.sendMessage());}}interface Message{public String sendMessage(); }//添加一个信息需要创建一个类实现Message接口 class WeChat implements Message{Overridepublic String sendMessage() {return 微信消息;} } class DingDing implements Message{Overridepublic String sendMessage() {return 钉钉消息;} }接口隔离使用多个接口不使用单一的总接口这个最好理解在这里就不解释了迪米特原则一个对象应该对其他对象有最少的了解在一个类中应尽量少的使用与其没有直接关系的类直接关系类中的成员属性在类中的方法作为参数使用在类中的方法作为返回值类型注意事项核心是降低类之间的耦合从被依赖折者的角度来看尽量将逻辑封装在类的内部对外除了提供的public方法不泄露任何信息从依赖者的角度来说只依赖应该依赖的对象切记不要为了用而用代码实现public class Demeter {public static void main(String[] args) {new SchoolManger().printAllEmployee(new CollegeManger());} }/学校员工类/ class SchoolEmployee{private String id;public void setId(String id){this.id id;}public String getId(){return id;} }/学院员工类/ class CollegeEmployee{private String id;public void setId(String id){this.id id;}public String getId(){return id;} }//学院员工管理管理类 class CollegeManger{//生成学院所有的员工public ListCollegeEmployee getCollegeEmployee(){ArrayListCollegeEmployee collegeEmployeeArrayList new ArrayList();for (int i 0; i 10 ; i) {CollegeEmployee collegeEmployee new CollegeEmployee();collegeEmployee.setId(学院员工的idi); //添加学院员工collegeEmployeeArrayList.add(collegeEmployee);}return collegeEmployeeArrayList;}} //学校员工管理类 class SchoolManger {//生成学校的员工public ListSchoolEmployee getSchoolEmployee() {ArrayListSchoolEmployee employeeArrayList new ArrayList();for (int i 0; i 5; i) {SchoolEmployee employee new SchoolEmployee();employee.setId(学校的员工id i);employeeArrayList.add(employee);}return employeeArrayList;}//输出学校员工和学院员工信息public void printAllEmployee(CollegeManger collegeManger) {//获取到学校员工ListSchoolEmployee employeeArrayList this.getSchoolEmployee();System.out.println(——–学校员工——–);for (SchoolEmployee employee1 : employeeArrayList) {System.out.println(employee1.getId());}System.out.println(——–学院员工——–);ListCollegeEmployee collegeEmployees collegeManger.getCollegeEmployee();//此处学校管理类中出现CollegeEmployee,此类与SchoolManger并非直接朋友,不合理for (CollegeEmployee collegeEmployee : collegeEmployees) {System.out.println(collegeEmployee.getId());}} }public class Demeter {public static void main(String[] args) {new SchoolManger().printAllEmployee(new CollegeManger());} }/学校员工类/ class SchoolEmployee{private String id;public void setId(String id){this.id id;}public String getId(){return id;} }/学员员工类/ class CollegeEmployee{private String id;public void setId(String id){this.id id;}public String getId(){return id;} }//学院员工管理管理类 class CollegeManger{//生成学员所有的员工public ListCollegeEmployee getCollegeEmployee(){ArrayListCollegeEmployee collegeEmployeeArrayList new ArrayList();for (int i 0; i 10 ; i) {CollegeEmployee collegeEmployee new CollegeEmployee();collegeEmployee.setId(学院员工的idi); //添加学院员工collegeEmployeeArrayList.add(collegeEmployee);}return collegeEmployeeArrayList;}public void printCollegeEmployee(){ListCollegeEmployee collegeEmployee getCollegeEmployee();for (CollegeEmployee employee : collegeEmployee) {System.out.println(学员员工idemployee.getId());}}} //学校员工管理类 class SchoolManger {//生成学校的员工public ListSchoolEmployee getSchoolEmployee() {ArrayListSchoolEmployee employeeArrayList new ArrayList();for (int i 0; i 5; i) {SchoolEmployee employee new SchoolEmployee();employee.setId(学校的员工id i);employeeArrayList.add(employee);}return employeeArrayList;}//输出学校员工和学院员工信息public void printAllEmployee(CollegeManger collegeManger) {//获取到学校员工ListSchoolEmployee employeeArrayList this.getSchoolEmployee();System.out.println(——–学校员工——–);for (SchoolEmployee employee1 : employeeArrayList) {System.out.println(employee1.getId());}//CollegeManger与SchoolManger是直接朋友,相互之间访问System.out.println(——–学员员工———–);collegeManger.printCollegeEmployee();} } 组合/聚合复用原则优先使用组合使系统更灵活其次才考虑继承达到复用的目的代码实现/组合/聚合复用原则案例1 使用依赖实现复用/ public class A {public void method01() {}public void method02() {} }class B extends A {private A a;public void method() {} }class Test {public static void main(String[] args) {new B().method01();new B().method02();} }/组合/聚合复用原则案例2 使用组合/聚合实现复用/ public class A {public void method01(){}public void method02(){} }class B{A a;public void setA(A a){this.a a;}public void use(){a.method01();a.method02();}}class Test{public static void main(String[] args) {A a new A();B b new B();b.setA(a);b.use();} } /组合/聚合复用原则案例3 使用依赖实现复用/ public class A {public void method01(){}public void method02(){} }class B{public void use(A a){a.method01();a.method02();}}class Test{public static void main(String[] args) {A a new A();B b new B();b.use(a);} }