java设计模式(一)【六大原则】
class Horse {
void ride(){}
} class WhiteHorse extends Horse { @Override
public void ride() {
System.out.println("骑白马");
}
} class BlackHorse extends Horse { @Override
public void ride() {
System.out.println("骑黑马");
}
} class Men {
void ride(Horse horse) {
horse.ride();
}
}
class Calculator {
void add(int x,int y) {
System.err.println(x+y);
}
} class AdvCalculator extends Calculator {
@Override
void add(int x,int y) {
System.out.println(x*y);
}
void sub(int x,int y) {
System.out.println(x-y);
}
}
子类AdvCalculator重写了父类Calculator的add方法,我们可以看出在调用add方法时,期望输出是两者和,但是由于子类复写了add方法,所以我们调用子类的add的时候获得的结果是两者的乘积,和期望不符合。
实际上这个原则隐藏了这样一层约束,当类B继承类A时,不能改变父类的规范和约束(不随意重写父类已经实现好的方法),如果子类随意修改这些契约,那么会对整个继承体系造成破坏。
class WhiteHorse { void ride() {
System.out.println("骑白马");
}
} class Men { void ride(WhiteHorse horse) {
horse.ride();
}
}
class BlackHorse { void ride() {
System.out.println("骑黑马");
}
}
interface Horse{
void ride();
} class Men { void ride(Horse horse) {
horse.ride();
}
}
class WhiteHorse implements Horse { public void ride() {
System.out.println("骑白马");
}
} class BlackHorse implements Horse { public void ride() {
System.out.println("骑黑马");
}
}




class Platoon {
private Squad[] squads; void gather() {
int count = 0;
for (Squad squad : squads) {
for (Man man : squad.gather()) {
count += man.gather();
}
}
System.out.println("一个排一共有"+count+"名士兵");
}
} class Squad {
private Man[] mans; Man[] gather() {
return this.mans;
}
} class Man {
int gather() {
return 1;
}
}
class Platoon {
private Squad[] squads; void gather() {
int count = 0;
for (Squad squad : squads) {
count += squad.gather();
}
System.out.println("一个排一共有"+count+"名士兵");
}
} class Squad {
private Man[] mans; int gather() {
int count = 0;
for (Man man : mans) {
count += man.gather();
}
return count;
}
} class Man {
int gather() {
return 1;
}
}
其实,迪米特法则谈论的就是对象之间的信息流量、流向以及信息的影响的控制。将实现的细节隐藏起来,让模块之间只通过api交互,这实际上就是信息的隐藏。它可以使模块之间脱耦,允许模块独立开发维护等一系列好处。所以在设计类的时候最好遵循以下几点
1、优先考虑将类设置成不变类
2、尽量降低一个类的访问权限
3、尽量降低成员的访问权限
--------------------------------------------------------end--------------------------------------------------------
作者:燃点null
出处:http://www.cnblogs.com/lightnull/
本文为燃点null原创,欢迎转载,但未经同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
java设计模式(一)【六大原则】的更多相关文章
- Java 设计模式(二)-六大原则
Java 设计模式(二)-六大原则 单一职责原则(Single Responsibility Principle) 定义: 不要存在多余一个原因导致类变更,既一个类只负责一项职责. 问题由来: 当类A ...
- C#之设计模式之六大原则(转载)
设计模式之六大原则(转载) 关于设计模式的六大设计原则的资料网上很多,但是很多地方解释地都太过于笼统化,我也找了很多资料来看,发现CSDN上有几篇关于设计模式的六大原则讲述的比较通俗易懂,因此转载过来 ...
- 设计模式之六大原则——接口隔离原则(ISP)
设计模式之六大原则——接口隔离原则(ISP) 转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/04/1792528.html 接口隔离原则 ...
- java中的设计模式及其六大原则
设计模式分类: 一共分为3大类:创造型模式.结构型模式.行为型模式. 创造型模式:工厂方法(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder). ...
- JAVA面向对象-----java面向对象的六大原则
现在编程的主流语言基本上都是面向对象的.如C#,C++,JAVA.我们在使用时,已经构造了一个个的类.但是往往由于我们在类内部或外部的设计上存在种 种问题,导致尽管是面向对象的语言,却是面向过程的逻辑 ...
- java设计模式之七大原则
java设计模式 以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16724932.html 设计模式 1.设计模式的目的 ...
- .NET 设计模式的六大原则理论知识
1. 单一职责原则(SRP)(Single Responsibility Principle)2. 里氏替换原则(LSP)(Liskov Substitution Principle)3. 依赖倒置原 ...
- java对象的六大原则
对象的六大原则: 1.单一职责原则(Single Responsibility Principle SRP) 2.开闭原则(Open Close Principle OCP) 3.里氏替换原则(Li ...
- 0 Java实现 一篇文章说尽设计模式之六大原则
我们知道,设计模式很有用,学好设计模式不但能让你写出更简洁,优雅的代码,还能使得代码的结构更清晰,也更有利于扩展 当然设计模式也不是万能的,一成不变的.设计模式只是前人总结出来的一种经验,一种特定问题 ...
- Java设计模式学习——设计原则
第一章 设计原则 1.开闭原则 一个软件实体,像类,模块,函数应该对扩展开放,对修改关闭 在设计的时候,要时刻考虑,让这个类尽量的好,写好了就不要去修改.如果有新的需求来,在增加一个类就完事了,原来的 ...
随机推荐
- JQuery - on绑定多个事件
一.jquery为多个选择器绑定同一个事件 $("#start,#end").on("click",function(){ alert("The pa ...
- C/C++掌握技能(三)
#include<cstdio> ][]={ //平年和闰年的每个月的天数 {,},{,},{,},{,},{,},{,},{,}, {,},{,},{,},{,},{,},{,} }; ...
- [学习笔记]Splay
其实就是一道题占坑啦 [NOI2005]维护数列 分析: 每次操作都要 \(Splay\) 一下 \(Insert\) 操作:重建一棵平衡树,把 \(l\) 变成根,\(l+2\) 变成右子树的根,那 ...
- Python系列之——利用Python实现微博监控
0x00 前言: 前几个星期在写一个微博监控系统 可谓是一波三折啊 获取到微博后因为一些字符编码问题 导致心态爆炸开发中断 但是就在昨天发现了另外一个微博的接口 一个手机微博的接口https://m. ...
- iOS-xcconfig环境变量那些事(配置环境的配置)
前言 在配置宏定义参数时,会发现一个问题,在需要临时修改或者测试一些数据时,修改宏,如果不修改,就多写一个,注释掉原来的,然后测试后,再换回来,当然了,如果一两个宏,可以这样,但是,如果每次改的比较多 ...
- Python中对矩阵的洗牌操作
[code] import numpy as np # 创建随机交换的索引 permutation = list(np.random.permutation(3)) # 创建矩阵X,Y X = np. ...
- python中内建函数isinstance的用法
语法:isinstance(object,type) 作用:来判断一个对象是否是一个已知的类型. 其第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表( ...
- nc命令简介
nc介绍 ncat/nc 既是一个端口扫描工具,也是一款安全工具,还能是一款监测工具,甚至可以做为一个简单的 TCP 代理. 在大多数 Debian 发行版中,nc 是默认可用的,它会在安装系统的过程 ...
- JavaSE-异常
1.try catch finally 异常捕获 public class ExceptionTest { public static void main(String[] args) { int a ...
- 全网最详细的Windows系统里Oracle 11g R2 Client客户端(64bit)安装后的初步使用(图文详解)
不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1) 打开服务(cmd— ...