一:面向对象回顾
面向对象程序设计:
1.基本思想:将系统分解为一组可重用的对象
2.对象之间维护相互之间的依赖关系
3.应用程序通过类和接口组织
4.OOP的编程元素实现核心的业务需要
需求分析:
电脑需要使用CPU去玩游戏。
- 实现一:以面向对象的方式实现Demo
每个实体都是一个对象,电脑获得cpu之后去玩游戏。
AndroidCpu:
package demo1; public class AndroidCpu { public void run() { System.out.println("android的cpu装上了"); } }
IosCpu:
package demo1; public class IosCpu { public void run() { System.out.println("ios的cpu装上了"); } }
电脑类:
package demo1; public class Computer { AndroidCpu cpu=new AndroidCpu(); public void playGame() { cpu.run(); System.out.println("电脑可以开始玩游戏了"); } }
启动类:
package demo1; public class Run { public static void main(String[] args) { Computer computer=new Computer(); computer.playGame(); } }
实现二:分离接口和实现
优化目标:消除电脑和CPU实现类之间的依赖关系。
不同cpu实现一个接口,电脑通过实现接口来达到玩游戏的目的。
接口:
public interface Cpu { public void run(); }
启动类:
public class IosCpu implements Cpu{ @Override public void run() { // TODO Auto-generated method stub System.out.println("Ios的Cpu装上了"); } }
实现三:采用容器类,所有对象都由容器管理
容器类:
public class Container { private static Container instance; private Map<String,Object> components; private Container() { components=new HashMap<String,Object>(); instance =this; Cpu cpu=new IosCpu(); components.put("cpu", cpu); Computer computer=new Computer(); components.put("computer",computer); } public static Container getInstance() { if(instance==null) { instance=new Container(); } return instance; } public Object getComponent(String key) { return components.get(key); } }
启动类:
public class Run { public static void main(String[] args) { Computer computer=(Computer) Container.getInstance().getComponent("computer"); computer.playGame(); } }
实现四:使用电脑选择类,封装查找逻辑,对外公开查找组件。
public class ComputerLocator { private static Container container=Container.getInstance(); public static Cpu getCpu() { return (Cpu) container.getComponent("cpu"); } }
实现五:分离接口和实现,进行依赖注入。
电脑类:
public class Computer { Cpu cpu; public void setCpu(Cpu cpu) { this.cpu = cpu; } public void playGame() { cpu.run(); System.out.println("电脑可以开始玩游戏了"); } }
启动类:
package demo5; public class Run { public static void main(String[] args) { Computer computer=(Computer) Container.getInstance().getComponent("computer"); Cpu cpu=new AndroidCpu(); computer.setCpu(cpu); computer.playGame(); } }