系列文章目录
文章目录

本篇文章我们以股民炒股这一事件为例,下面我们来看第一版代码
股民炒股代码
java
class Stock1{
public void sell(){
System.out.println("股票1卖出");
}
public void buy(){
System.out.println("股票1买入");
}
}
class Stock2{
public void sell(){
System.out.println("股票2卖出");
}
public void buy(){
System.out.println("股票2买入");
}
}
class NationalDebt1{
public void sell(){
System.out.println("国债1卖出");
}
public class buy(){
System.out.println("国债1买入");
}
}
//房地产类
class Realty1{
public void sell(){
System.out.println("房地产1卖出");
}
public void buy(){
System.out.println("房地产1买入");
}
}
public static void main(String[] args) {
Stock1 stock1 = new Stock1();
Stock1 stock2 = new Stock2();
NationalDebt1 nationalDebt1 = new NationalDebt1();
Realty1 realty1 = new Realty1();
stock1.buy();
stock2.buy();
nationalDebt1.buy();
realty1.buy();
stock1.sell();
stock2.sell();
nationalDebt1.sell();
realty1.sell();
}
如果我们是投资基金的话,那么就是将我们的钱交给基金来去炒股,此时有第二版代码投资基金代码。
投资基金代码
基金代码如下
java
//基金类如下
class Fund{
Stock1 stock1;
Stock2 stock2;
NationalDebt1 nationalDebt1;
Realty1 realty1;
public Fund(){
stock1 = new Stock1();
stock2 = new Stock2();
nationalDebt1 = new NationalDebt1();
realty1 = new Realty1();
}
public void buyFund(){
stock1.buy();
stock2.buy();
nationalDebt1.buy();
realty1.buy();
}
public void sellFund(){
stock1.sell();
stock2.sell();
nationalDebt1.sell();
realty1.sell();
}
//基金类可以有很多买入卖出操作,持仓比例等
//这里无须告知客户
}
//客户端
public static void main(String[] args){
Fund fund1 = new Fund();
//基金购买
fund1.buyFund();
//基金赎回
fund1.sellFund();
}
外观模式
外观模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
下面是外观模式的代码示例:
java
//子系统1
class SubSystemOne{
public void methodOne(){
System.out.println("子系统方法一");
}
}
//子系统2
class SubSystemTwo{
public void methodTwo(){
System.out.println("子系统方法二");
}
}
//子系统三
class SubSystemThree{
public void methodThree(){
System.out.println("子系统方法三");
}
}
//子系统四
class SubSystemFour{
public void methodFour(){
System.out.println("子系统方法四");
}
}
//外观类
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();
}
}
//客户端调用
public static void main(String[] args) {
Facade facade = new Facade();
// 由于Facade的作用,客户端可以根本不知道其他四个子系统类的作用
facade.methodA();
facade.methodB();
}
何时使用外观模式
对于何时使用外观模式,我们要分三个阶段来说
首先,在设计初期阶段,就应该要有意识地将不同的两个层分离, 比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低,其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂, 大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用他们的用户程序带来了使用上的困难,增加外观Facade可以提供一个简单的接口,减少他们之间的依赖。第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了, 但因为他包含非常重要的功能,新的需求开发必须要依赖于它,此时用外观模式Facade也是非常合适的,我们可以为新系统开发一个外观类Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统于Facade对象交互,Facade与遗留代码交互所有复杂的工作。
总结
以上就是本文全部内容,本文主要向大家介绍了设计模式中的外观模式,通过炒股代码更改为基金类代码,来引出外观模式代码的大致模板。感谢各位能够看到最后,如有问题,欢迎各位大佬在评论区指正,希望大家可以有所收获!创作不易,希望大家多多支持!