学好武功,心法是多么的重要。像是那些练错心法的,比如欧阳锋大叔,心法错了,走火入魔了,死在华山之巅。还有些必先自宫的武功,没准后面一页就说上一页是不需要的。所以6大原则,大家也把心法吃透,才能练好武功啊。
首先看下设计模式6大原则的概览。
1、开闭原则 | 对扩展开放,对修改关闭。
2、里氏代换原则 | 子类都可以做到代替基类的出现。
3、依赖倒转原则 | 针对接口编程,依赖于抽象而非具体。
4、接口隔离原则 | 使用多个隔离的接口,比使用单个接口要好。(降低类之间的耦合度)
5、迪米特法则(最少知道原则)| 一个实体应当尽量少地与其他实体之间发生相互作用。
6、单一职责 | 一个类应该只有一个引起它变化的原因,一个职责。
当然这么看还是太抽象了,下面会分4天(4篇)小漫画+代码的形式详细来讲解~
第一天
上次链接:设计模式开篇
public class Animal {
public void eat() {
System.out.println("eat something");
}
public void sleep() {
System.out.println("sleeping ~~");
}
}
public void eat (String kind) {
if (kind.equals("rabbit")) {
System.out.println("eat some carmine");
}
if (kind.equals("tigger")) {
System.out.println("eat some meat");
}
}
public class Rabbit extends Animal {
public void eat() {
System.out.println("eat some carmine");
}
}
public class Cooker {
public void cook(Potato potato) {
System.out.println("开始做菜了");
System.out.println(potato.getFood());
}
}
class Potato {
public String getFood() {
return "酸辣土豆丝";
}
}
public interface FoodMaterial {
String getFood();
}
class Potato implements FoodMaterial{
@Override
public String getFood() {
return "酸辣土豆丝";
}
}
class Chicken implements FoodMaterial{
@Override
public String getFood() {
return "可乐鸡翅";
}
}
public class Cooker {
public void cook(FoodMaterial foodMaterial) {
System.out.println("开始做菜了");
System.out.println(foodMaterial.getFood());
}
public static void main (String []args) {
Cooker cooker = new Cooker();
cooker.cook(new Potato());
}
}
第二天
public interface EmployService {
void sign (); //打卡
void knockCode();//敲代码
void recruit(); //招聘
void relationShip(); //员工关系
void performanceEvaluation(); //绩效管理
void procedureDesign(); //程序设计
void makeBugs(); //哈哈哈
}
public class HrServiceImpl implements EmployService{
@Override
public void sign() {
System.out.println("打卡");
}
@Override
public void knockCode() {
}
@Override
public void recruit() {
System.out.println("招聘");
}
@Override
public void relationShip() {
System.out.println("员工关系");
}
@Override
public void performanceEvaluation() {
System.out.println("绩效考核");
}
@Override
public void procedureDesign() {
}
@Override
public void makeBugs() {
}
}
public class ProgrammerServiceImpl implements EmployService {
@Override
public void sign() {
System.out.println("打卡");
}
@Override
public void knockCode() {
System.out.println("敲代码");
}
@Override
public void recruit() {
}
@Override
public void relationShip() {
}
@Override
public void performanceEvaluation() {
}
@Override
public void procedureDesign() {
System.out.println("程序设计");
}
@Override
public void makeBugs() {
System.out.println("造点bug");
}
}
public class ProgrammerClient {
public void sign (EmployService employService) {
employService.sign();
}
public void knockCode(EmployService employService) {
employService.knockCode();
}
public void procedureDesign(EmployService employService) {
employService.procedureDesign();
}
public void makeBugs(EmployService employService) {
employService.makeBugs();
}
}
public class HrClient {
public void sign (EmployService employService) {
employService.sign();
}
public void performanceEvaluation(EmployService employService) {
employService.performanceEvaluation();
}
public void recruit(EmployService employService) {
employService.recruit();
}
public void relationShip(EmployService employService) {
employService.relationShip();
}
}
public interface EmployService {
void sign(); //打卡
}
public interface HrService {
void recruit(); //招聘
void relationShip(); //员工关系
void performanceEvaluation(); //绩效管理
}
public class HrServiceImpl implements HrService,EmployService{
@Override
public void sign() {
System.out.println("打卡");
}
@Override
public void recruit() {
System.out.println("招聘");
}
@Override
public void relationShip() {
System.out.println("员工关系");
}
@Override
public void performanceEvaluation() {
System.out.println("绩效管理");
}
}
public interface ProgrammerService {
void knockCode();//敲代码
void procedureDesign(); //程序设计
void makeBugs(); //哈哈哈
}
public class ProgrammerServiceImpl implements ProgrammerService,EmployService {
@Override
public void sign() {
System.out.println("签到");
}
@Override
public void knockCode() {
System.out.println("敲代码");
}
@Override
public void procedureDesign() {
System.out.println("程序设计");
}
@Override
public void makeBugs() {
System.out.println("造点bug");
}
}
第三天
public interface CarService{
String getName ();
void drive ();
String color();
}
public class Sedan implements CarService {
private String name;
private String color;
private int speed;
public Sedan(String name, String color,int speed{
this.name = name;
this.color = color;
this.speed = speed;
}
@Override
public String getName() {
return this.name;
}
@Override
public void drive() {
System.out.println("普通的小车普通的开" + this.speed);
}
@Override
public String color() {
return this.color;
}
}
public class FastSedan extends Sedan {
public FastSedan(String name, String color, int speed) {
super(name, color, speed);
}
public void drive() {
System.out.println("飙车的飙,飙起来" + this.getSpeed() * 2);
}
}
public class Boss {
//发布任务给cto
public void pushJob(CTO cto) {
List<Programmer> list = new ArrayList<Programmer>();
for (int i = 0;i < 5;i++) {
list.add(new Programmer());
}
cto.assignmentTask(list);
}
}
public class CTO {
//分配任务
public void assignmentTask(List<Programmer> programmers) {
for (Programmer programmer:programmers) {
programmer.backPot();
}
}
}
public class Programmer {
//背锅
public void backPot () {
System.out.println("程序员背起了小锅");
}
}
public class Client {
public static void main (String []args) {
Boss boss = new Boss();
boss.pushJob(new CTO());
}
}
最后一天
我们来巩固一下
公众号「Java小咖秀」,专注Java领域 , 和小伙伴们一起学习进步~
本文使用 mdnice 排版