文章目录
1. 需求
设计一个股民炒股票的代码
2. 代码版本1.0
2.1 UML类图

2.2 具体股票、国债、房产类
class Stock1{
//卖股票
public void sell(){
System.out.println("股票1卖出");
}
//买股票
public void buy(){
System.out.println("股票1买入");
}
}
class Stock2{
//卖股票
public void sell(){
System.out.println("股票1卖出");
}
//买股票
public void buy(){
System.out.println("股票1买入");
}
}
class NationDebt1{
//卖国债
public void sell(){
System.out.println("国债1卖出");
}
//买国债
public void buy(){
System.out.println("国债1买入");
}
}
class Realty1{
//卖房地产
public void sell(){
System.out.println("房地产1卖出");
}
//买房地产
public void buy(){
System.out.println("房地产1买入");
}
}
2.3 客户端
Stock1 stock1 = new Stock1();
Stock2 stock2 = new Stock2();
NationDebt1 nationDebt1 = new NationDebt1();
Realty1 realty1 = new Realty1();
stock1.buy();
stock2.buy();
nationDebt1.buy();
realty1.buy();
stock1.sell();
stock2.sell();
nationDebt1.sell();
realty1.sell();
3. 代码版本2.0
需求变更:现在增加一个基金类
3.1 UML类图

3.2 基金类
public class Fund {
Stock1 stock1;
Stock2 stock2;
NationalDebt1 nd1;
Realty rt1;
public Fund(){
stock1 = new Stock1();
stock2 = new Stock2();
nd1 = new NationalDebt1();
rt1 = new Realty1();
}
public void buyFund(){
stock1.buy();
stock2.buy();
nd1.buy();
rt1.buy();
}
public void sellFund(){
stock1.sell();
stock2.sell();
nd1.sell();
rt1.sell();
}
//基金很多买入卖出操作,持仓比例等
//无需提前告知用户
}
3.3 客户端
Fund fund1 = new Fund();
//基金购买
fund1.buyFund();
//基金赎回
fund1.sellFund();
3.4 小结
这样的写法,基本就是外观模式的基本代码结构了。接下来介绍外观模式。
4. 外观模式
4.1 概念
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
4.2 案例代码
4.2.1 UML类图

4.2.2 四个子系统
public class SubSystemOne {
public void methodOne(){
System.out.println("子系统方法一");
}
}
public class SubSystemTwo {
public void methodTwo(){
System.out.println("子系统方法二");
}
}
public class SubSystemThree {
public void methodThree(){
System.out.println("子系统方法三");
}
}
public class SubSystemFour {
public void methodFour(){
System.out.println("子系统方法四");
}
}
4.2.3 外观类
//外观类
//它需要了解所有子系统的方法和属性,进行组合以备外界调用
public class Facade {
SubSystemOne one;
SubSystemTwo two;
SubSystemThree three;
SubSystemFour four;
public Facade(){
one = new SubSystemOne();
two = new SubSystemTwo();
three = new SubSystemThree();
four = new SubSystemFour();
}
public void methodA(){
one.methodOne();
two.methodTwo();
three.methodThree();
four.methodFour();
}
public void methodB(){
two.methodTwo();
three.methodThree();
}
}
4.2.4 客户端
Facade facade = new Facade();
facade.methodA();
facade.methodB();
4.3 使用场景
- 第一,在设计初期阶段,应该要有意识地将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。
- 第二,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。
- 第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,可以为新系统开发一个外观 Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

683

被折叠的 条评论
为什么被折叠?



