组合就是拿着一个类做另一个类的成员变量
Computer类
package composite;
//组合
public class Computer {
//组合就是拿着一个类做另一个类的成员变量
private Cpu cpu = new Cpu();
private Memory memory = new Memory();
private MainBoard mainBoard = new MainBoard();
public void work(){
cpu.calc();
cpu.control();
memory.store();
mainBoard.connect();
}
public static void main(String[] args) {
Computer computer = new Computer();
computer.work();
}
}
Cpu
package composite;
public class Cpu {
public void calc(){
System.out.println("=========Cpu calc()===========");
}
public void control(){
System.out.println("=========Cpu control()===========");
}
}
Memory
package composite;
public class Memory {
public void store(){
System.out.println("=========Memory store()===========");
}
}
MainBoard
package composite;
public class MainBoard {
public void connect(){
System.out.println("=========MainBoard connect()===========");
}
}
结果
=========Cpu calc()=========== =========Cpu control()=========== =========Memory store()=========== =========MainBoard connect()===========
组合灵活的地方
AMDCpu
package composite;
public class AMDCpu extends Cpu{
@Override
public void calc() {
System.out.println("=====AMDCpu calc()=====");
}
}
IntelCpu
package composite;
public class IntelCpu extends Cpu {
@Override
public void calc() {
System.out.println("=====IntelCpu calc()=====");
}
}
此时的Computer使用其他类型的Cpu
package composite;
//组合
public class Computer {
//组合就是拿着一个类做另一个类的成员变量
private Cpu cpu = new Cpu();
private Memory memory = new Memory();
private MainBoard mainBoard = new MainBoard();
//注入CPU 使用set方法或者构造方法来给cpu赋新值
public void setCpu(Cpu cpu){
this.cpu=cpu;
}
public void work(){
cpu.calc();//这样这里就不用改也能使用IntelCPU了
cpu.control();
memory.store();
mainBoard.connect();
}
public static void main(String[] args) {
Computer computer = new Computer();
Cpu cpu = new IntelCpu();
computer.setCpu(cpu);//此时输出=====IntelCpu calc()=====
computer.work();
}
}



