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.开闭原则 一个软件实体,像类,模块,函数应该对扩展开放,对修改关闭 在设计的时候,要时刻考虑,让这个类尽量的好,写好了就不要去修改.如果有新的需求来,在增加一个类就完事了,原来的 ...
随机推荐
- 「PKUWC2019」拓扑序计数(状压dp)
考场只打了 \(52\) 分暴力...\(ljc\) 跟我说了一下大致思路,我回去敲了敲. \(f[i]\) 表示状态为 \(i\) 时的方案数.我们用二进制 \(0/1\) 表示不选/选点 \(i\ ...
- [Element-UI] 使用Element-UI的DateTimePicker组件报错:Cannot read property 'getHours' of undefined
使用Element-UI组件的DateTimePicker,如下: <template> <div class="block"> <span clas ...
- Swift 里 Set(四)Testing for Membership
即contains操作 /// - Parameter member: An element to look for in the set. /// - Returns: `true` if `mem ...
- Shell - 简明Shell入门06 - 循环语句(Loop)
示例脚本及注释 #!/bin/bash # for循环 for filename in t1 t2 t3 do touch $filename.txt echo "Create new fi ...
- 08-01 java 帮助文档的制作和使用,使用jdk提供的帮助文档
01_帮助文档的制作和使用 制作说明书的流程 如何制作一个说明书呢? A:写一个工具类 B:对这个类加入文档注释 怎么加呢? 加些什么东西呢? C:用工具解析文档注释 javadoc工具 D:格式 j ...
- Python 模块 和 包
模块 os模块 路径拼接 os.path.join
- Solr6.5配置中文分词IKAnalyzer和拼音分词pinyinAnalyzer (二)
之前在 Solr6.5在Centos6上的安装与配置 (一) 一文中介绍了solr6.5的安装.这篇文章主要介绍创建Solr的Core并配置中文IKAnalyzer分词和拼音检索. 一.创建Core: ...
- spring cloud开发、部署注意
一.开发时,配置服务的配置使用本地路径,不使用svn和git,因为后者每个开发人员都会修改配置,导致别人也拿到其他人修改的配置,本地配置示例如下: spring: application: name: ...
- java项目日志写到logstash-TCP/UDP
好处:项目日志写到logstash,然后发送到ElasticSearch,可以方便查看搜索日志,还可以做报表分析. logstash是一个数据采集工具,有多种渠道,比如文件,tcp,udp等,如果是采 ...
- makemigrations migrate
教程 如何重置迁移 (图片:https://www.pexels.com/photo/sky-flying-animals-birds-1209/) Django迁移系统的开发和优化使其能够进行大量迁 ...