设计模式七大原则

设计模式目的

1、代码重用性

2、可读性

3、可读性

4、扩展性

5、可靠性

6、高内聚低耦合

七大原则

1、单一职责原则

一个类或方法中只做一件事情

2、接口隔离原则

一个类通过接口去依赖另一个类的所有实现方法(拆接口)

public interface InterfaceIsolate {public static void main(String[] args) {C c = new C();c.depend1(new A());D d = new D();d.depend2(new B());d.depend3(new B());}
}
//将接口拆开
interface interface1 {void method1();
}
interface interface2 {void method2();void method3();
}
interface interface3 {void method4();
}
class A implements interface1 {@Overridepublic void method1() {System.out.println("method1");}
}
class B implements interface2 , interface3 {@Overridepublic void method2() {System.out.println("method2");}@Overridepublic void method3() {System.out.println("method3");}@Overridepublic void method4() {System.out.println("method4");}
}
//类通过接口来实现类的方法
class C {public void depend1(interface1 i) {i.method1();}
}
class D {public void depend2(interface2 i) {i.method2();i.method3();}public void depend3(interface3 i) {i.method4();}
}

3、依赖倒转(倒置原则)

接口和抽象类定义好规范

使用实现类来实现接口或抽象类

1、通过接口传递实现

public class DependencyConvert {public static void main(String[] args) {OpenTV openTV = new OpenTV();openTV.open(new Changhong());}
}
interface MyTV {void open(OpsTV opsTV);//通过接口传递实现
}
interface OpsTV {void play();
}
class OpenTV implements MyTV {@Overridepublic void open(OpsTV opsTV) { opsTV.play();}
}
class Changhong implements OpsTV {@Overridepublic void play() {System.out.println("长虹TV开始播放");}
}

2、通过构造方法实现

public class DependencyConvert {public static void main(String[] args) {OpenTV openTV = new OpenTV(new Changhong());openTV.open();}
}interface MyTV {void open();
}
interface OpsTV {void play();
}
class OpenTV implements MyTV {OpsTV opsTV;OpenTV(OpsTV opsTV) { //通过构造方法实现this.opsTV = opsTV;}@Overridepublic void open() {opsTV.play();}
}
class Changhong implements OpsTV {@Overridepublic void play() {System.out.println("长虹TV开始播放");}
}

3、通过setter注入实现

public class DependencyConvert {public static void main(String[] args) {OpenTV openTV = new OpenTV();openTV.setOpsTV(new Changhong());openTV.open();}
}interface MyTV {void open();
}
interface OpsTV {void play();
}class OpenTV implements MyTV {OpsTV opsTV;public void setOpsTV(OpsTV opsTV) {//通过setter注入实现this.opsTV = opsTV;}@Overridepublic void open() {opsTV.play();}
}class Changhong implements OpsTV {@Overridepublic void play() {System.out.println("长虹TV开始播放");}
}

4、里氏替换原则

继承时,尽量不要重写父类方法

采取依赖、聚合、组合等关系代替

public class replaceLi {public static void main(String[] args) {int a = 8;int b = 3;Test2 test2 = new Test2();System.out.println(test2.f1(a, b));System.out.println(test2.f2(a, b));}
}class Test1 {public int f1(int a,int b) {return a-b;}
}class Test2 {Test1 test1 = new Test1();public int f1(int a, int b) {return a + b;}public int f2(int a, int b) {return test1.f1(a,b);}
}

5、开闭原则

ocp原则:对扩展方开放,对修改方(调用方)关闭

public class OcpPrinciple {public static void main(String[] args) {Graphic graphic = new Graphic();graphic.drawGraphic(new Triangle());graphic.drawGraphic(new Rectangle());}
}class Graphic {void drawGraphic(Shape shape) { //调用方无需修改shape.draw();}
}abstract class Shape {abstract void draw();
}
class Triangle extends Shape {@Overridevoid draw() {System.out.println(" 绘制三角形 ");}
}class Rectangle extends Shape { //扩展放直接继承Shape@Overridevoid draw() {System.out.println(" 绘制矩形 ");}
}

6、迪米特法则

最少知道原则:一个类对自己依赖的类知道越少越好,将逻辑封装到类的内部(尽量,无法避免)

直接朋友

1、出现在成员变量、方法参数、方法返回值的类

2、局部变量中的类都不是直接朋友!

public class Demeter {public static void main(String[] args) {PrintSchoolAllPeople printSchoolAllPeople = new PrintSchoolAllPeople();printSchoolAllPeople.printPeople(new PrintSchoolStudent());}
}class SchoolAllPeople {private String id;public String getId() {return id;}public void setId(String id) {this.id = id;}@Overridepublic String toString() {return "SchoolAllPeople{" +"id='" + id + '\'' +'}';}
}
class SchoolStudent {private String id;public String getId() {return id;}public void setId(String id) {this.id = id;}@Overridepublic String toString() {return "SchoolStudent{" +"id='" + id + '\'' +'}';}
}class PrintSchoolStudent {public List<SchoolStudent> getAllSchoolStudent() {ArrayList<SchoolStudent> list = new ArrayList<>();for (int i = 1; i <= 4; i++) {SchoolStudent schoolStudent = new SchoolStudent();schoolStudent.setId("学生id:"+i);list.add(schoolStudent);}return list;}public void printStudent() {List<SchoolStudent> list = getAllSchoolStudent();System.out.println("###############学生###############");for (SchoolStudent e : list) {System.out.println(e);}}}class PrintSchoolAllPeople {public List<SchoolAllPeople> getAllSchoolAllPeople() {ArrayList<SchoolAllPeople> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {SchoolAllPeople schoolAllPeople = new SchoolAllPeople();schoolAllPeople.setId("学校人员id:"+i);list.add(schoolAllPeople);}return list;}void printPeople(PrintSchoolStudent printSchoolStudent) {printSchoolStudent.printStudent();List<SchoolAllPeople> list1 = getAllSchoolAllPeople();System.out.println("##############所有人员##############");for (SchoolAllPeople e : list1) {System.out.println(e);}}
}

7、合成复用原则

尽量使用合成/聚合,而不是继承

JAVA设计模式七大原则相关推荐

  1. Java设计模式七大原则-单一职责原则

    目录 概述:设计模式的目的 设计模式七大原则 单一职责原则 单一职责原则注意事项和细节 概述:设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等 ...

  2. Java设计模式七大原则(3)

    @Adrian 依赖倒转原则 一.基本介绍 依赖倒转原则(Dependence Inversion Principle)是指: 1)高层模块应该依赖低层模块,二者都应该依赖其抽象 2)抽象不应该依赖细 ...

  3. Java设计模式七大原则-开闭原则

    开闭原则 基本介绍 开闭原则(Open Closed Principle)是编程中最基础.最重要的设计原则 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方).用抽象构建框 ...

  4. Java设计模式七大原则-依赖倒转(倒置)原则

    目录 依赖倒转原则 依赖关系传递的三种方式和应用案例 1. 接口传递 2.构造方法传递 3.setter方式传递 依赖倒转原则的注意事项和细节 依赖倒转原则 基本介绍 依赖倒转原则(Dependenc ...

  5. JAVA设计模式--七大原则之单一职责(01)

    一个类,只有一个引起它变化的原因.应该只有一个职责.每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起.这会导致脆弱的设计.当一个职责发生变化时,可能会影响其它的职责.另 ...

  6. Java设计模式七大原则-接口隔离原则

    接口隔离原则(Interface Segregation Principle) 基本介绍 1) 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 2) 先看一张图: 类A ...

  7. Java设计模式-七大设计原则

    Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...

  8. Java面试之设计模式七大原则

    最近项目不太忙,不怎么加班,正利用晚上时间好好学习学习设计模式,之前可能多多少少都用到过,但是有些还是很模糊,这下正好系统的学一下. 好了,话不多说,进入正题. 1.什么是设计模式? 软件工程中,设计 ...

  9. Day305.设计模式七大原则 -Java设计模式

    七大设计原则 一.设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好的↓↓↓ 1. 代码重用 ...

最新文章

  1. HTTP学习笔记(1)
  2. IBMX3650M3服务器8硬盘升级16硬盘的配置方法
  3. SIEM市场并购:Sensage被军工企业收购
  4. application time for the banking industry
  5. BZOJ-2716-天使玩偶angel-CDQ分治
  6. LUOGU P2827 蚯蚓 (noip 2016)
  7. Apache Maven ToolChains的使用
  8. WebClient UI删除搜索条件的后台处理,以及max hit的处理逻辑
  9. maven配置tomcat7
  10. Discuz!X1 to Discuz!NT3.1论坛转换工具 v1.0
  11. matlab中最接近零的数值
  12. java中容易混淆的方法_java中容易混淆的区别
  13. 黑群晖vmm专业版_Virtual Machine Manager 专业版打造高效安全虚拟环境
  14. Julia: 引用、copy与数组
  15. css的样式局部作用,局部套用CSS样式.PPT
  16. zebradesginer zpl代码_ZebraDesigner Pro 斑马打印机命令 解读
  17. Java实现从第三方系统单点登录到致远OA
  18. css进行布局时,同一行多个元素摆放后,设置margin-right让他们之间产生间距,那么最后一个元素设置margin-right是多余的
  19. Can't clobber writable file **************
  20. VisualSFM+MeshLab 三维重建全过程记录

热门文章

  1. HBuilder制作移动APP资源升级包的教程。
  2. Maven私服Nexus的搭建
  3. Facebook 广告效果越来越差,怎么办?
  4. 什么是工作流管理系统
  5. 单个原子对X射线的散射
  6. 工业相机运动拍摄拖影问题及解决
  7. 关于商业/数据分析,很多人不知道的四大进阶能力
  8. 二少爷的Review第一集UIApplication相关
  9. 广州大学大学物理 第九章 宏观热力学
  10. 彻底解决python库安装慢的问题