学好武功,心法是多么的重要。像是那些练错心法的,比如欧阳锋大叔,心法错了,走火入魔了,死在华山之巅。还有些必先自宫的武功,没准后面一页就说上一页是不需要的。所以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 排版