文章目录
 - 组合模式
 - 1.引出组合模式
 - 1.院系展示需求
 - 2.组合模式基本介绍
 - 3.组合模式原理类图
 - 4.解决的问题
 
 
 - 2.组合模式解决院系展示
 - 1.类图
 - 2.代码实现
 - 1.AbsOrganizationComponent.java 总体抽象类用于存储信息和定义方法
 - 2.University.java 第一层,University 可以管理 College
 - 3.College.java 第二层,可以管理Department
 - 4.Department.java 最底层,没有操作节点的方法
 - 5.Client.java 从大到小创建对象,从小到大组合树结构
 - 6.结果
 
 
 
 - 3.JDK的HashMap使用了组合模式
 
 - 外观模式
 - 1.引出外观模式
 - 1.影院管理项目
 - 2.传统方式解决
 - 3.传统方案的问题分析以及解决方式
 
 
 - 2.外观模式
 - 1.基本介绍
 - 2.原理类图
 - 3.思路分析
 - 4.类图
 - 5.目录结构
 - 6.代码实现
 - 1.device 子系统层
 - 1.DVDPlayer.java
 - 2.Popcorn.java
 - 3.Projector.java
 - 4.Screen.java
 
 - 2.appearance 外观层,统一调用子系统
 - 3.Client.java 客户端,直接调用外观层,不关系子系统的具体调用
 - 4.结果
 
 - 7.注意事项
 
 
 - 3.外观模式在MyBatis框架的应用
 
 
 
  
 
组合模式
 
1.引出组合模式
 
1.院系展示需求
 

 
2.组合模式基本介绍
 

 
3.组合模式原理类图
 

 
4.解决的问题
 

 
2.组合模式解决院系展示
 
1.类图
 

 
2.代码实现
 
1.AbsOrganizationComponent.java 总体抽象类用于存储信息和定义方法
 
package com.sun;
public abstract class AbsOrganizationComponent {private String name;private String des;public AbsOrganizationComponent(String name, String des) {this.name = name;this.des = des;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDes() {return des;}public void setDes(String des) {this.des = des;}protected void add(AbsOrganizationComponent absOrganizationComponent) {throw new UnsupportedOperationException();}protected void remove(AbsOrganizationComponent absOrganizationComponent) {throw new UnsupportedOperationException();}protected abstract void print();}
 
2.University.java 第一层,University 可以管理 College
 
package com.sun;import java.util.ArrayList;
import java.util.List;
public class University extends AbsOrganizationComponent {List<AbsOrganizationComponent> organizationComponents = new ArrayList<AbsOrganizationComponent>();public University(String name, String des) {super(name, des);}@Overrideprotected void add(AbsOrganizationComponent absOrganizationComponent) {organizationComponents.add(absOrganizationComponent);}@Overrideprotected void remove(AbsOrganizationComponent absOrganizationComponent) {organizationComponents.remove(absOrganizationComponent);}@Overrideprotected void print() {System.out.println("--------" + super.getName() + "--------");for (AbsOrganizationComponent organizationComponent : organizationComponents) {organizationComponent.print();}}@Overridepublic void setDes(String des) {super.setDes(des);}@Overridepublic String getDes() {return super.getDes();}@Overridepublic void setName(String name) {super.setName(name);}@Overridepublic String getName() {return super.getName();}
}
 
3.College.java 第二层,可以管理Department
 
package com.sun;import java.util.ArrayList;
import java.util.List;
public class College extends AbsOrganizationComponent {List<AbsOrganizationComponent> organizationComponents = new ArrayList<AbsOrganizationComponent>();public College(String name, String des) {super(name, des);}@Overrideprotected void add(AbsOrganizationComponent absOrganizationComponent) {organizationComponents.add(absOrganizationComponent);}@Overrideprotected void remove(AbsOrganizationComponent absOrganizationComponent) {organizationComponents.remove(absOrganizationComponent);}@Overrideprotected void print() {System.out.println("--------" + super.getName() + "--------");for (AbsOrganizationComponent organizationComponent : organizationComponents) {System.out.println("--------" + organizationComponent.getName() + "--------");}}@Overridepublic void setDes(String des) {super.setDes(des);}@Overridepublic String getDes() {return super.getDes();}@Overridepublic void setName(String name) {super.setName(name);}@Overridepublic String getName() {return super.getName();}
}
 
4.Department.java 最底层,没有操作节点的方法
 
package com.sun;
public class Department extends AbsOrganizationComponent {public Department(String name, String des) {super(name, des);}protected void print() {System.out.println("叶子节点:" + getName());}@Overridepublic void setDes(String des) {super.setDes(des);}@Overridepublic String getDes() {return super.getDes();}@Overridepublic void setName(String name) {super.setName(name);}@Overridepublic String getName() {return super.getName();}
}
 
5.Client.java 从大到小创建对象,从小到大组合树结构
 
package com.sun;
public class Client {public static void main(String[] args) {University university = new University("清华", "niubi");College computer = new College("计算机学院", "培养计算机人才的");College infoEngineer = new College("信息工程学院", "培养信息工程人才的");computer.add(new Department("网络安全", "网安"));computer.add(new Department("软件工程", "软工"));computer.add(new Department("计算机科学与技术", "计科"));infoEngineer.add(new Department("通信工程", "通信工程不好学"));infoEngineer.add(new Department("信息工程", "信息工程不好学"));university.add(computer);university.add(infoEngineer);university.print();}
}
 
6.结果
 

 
3.JDK的HashMap使用了组合模式
 

 
外观模式
 
1.引出外观模式
 
1.影院管理项目
 

 
2.传统方式解决
 

 
3.传统方案的问题分析以及解决方式
 

 
2.外观模式
 
1.基本介绍
 

 
2.原理类图
 

 
3.思路分析
 

 
4.类图
 

 
5.目录结构
 

 
6.代码实现
 
1.device 子系统层
 
1.DVDPlayer.java
 
package com.sun.device;
public class DVDPlayer {private static DVDPlayer instance = new DVDPlayer();public static DVDPlayer getInstance() {return instance;}public void on() {System.out.println("DVD on");}public void off() {System.out.println("DVD off");}public void play() {System.out.println("DVD is playing");}
}
 
2.Popcorn.java
 
package com.sun.device;
public class Popcorn {private static Popcorn instance = new Popcorn();public static Popcorn getInstance() {return instance;}public void on() {System.out.println("Popcorn on");}public void off() {System.out.println("Popcorn off");}public void pop() {System.out.println("Popcorn is poping");}
}
 
3.Projector.java
 
package com.sun.device;
public class Projector {private static Projector instance = new Projector();public static Projector getInstance() {return instance;}public void on() {System.out.println("Projector on");}public void off() {System.out.println("Projector off");}public void focus() {System.out.println("Projector is focusing");}
}
 
4.Screen.java
 
package com.sun.device;
public class Screen {private static Screen instance = new Screen();public static Screen getInstance() {return instance;}public void up() {System.out.println("Screen up");}public void down() {System.out.println("Screen down");}
}
 
2.appearance 外观层,统一调用子系统
 
package com.sun.appearance;import com.sun.device.DVDPlayer;
import com.sun.device.Popcorn;
import com.sun.device.Projector;
import com.sun.device.Screen;
public class HomeTheaterFacade {private DVDPlayer dvdPlayer;private Popcorn popcorn;private Projector projector;private Screen screen;public HomeTheaterFacade() {this.dvdPlayer = DVDPlayer.getInstance();this.popcorn = Popcorn.getInstance();this.projector = Projector.getInstance();this.screen = Screen.getInstance();}public void ready() {dvdPlayer.on();popcorn.on();projector.on();screen.up();}public void play() {dvdPlayer.play();}public void shutdown() {dvdPlayer.off();popcorn.off();projector.off();screen.down();}}
 
3.Client.java 客户端,直接调用外观层,不关系子系统的具体调用
 
package com.sun;import com.sun.appearance.HomeTheaterFacade;
public class Client {public static void main(String[] args) {HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();homeTheaterFacade.ready();homeTheaterFacade.play();homeTheaterFacade.shutdown();}
}
 
4.结果
 

 
7.注意事项
 

 
3.外观模式在MyBatis框架的应用
 
