外观模式
2015-11-19 17:54
120 查看
外观模式:为子系统的一组接口,提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
在讲外观模式前,我们引入两个设计模式中的两个重要原则:依赖倒转原则和迪米特法则。
依赖倒转原则:抽象不依赖细节,细节要依赖抽象。简单讲,就是面向接口编程,而不面向实现编程。
迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中的一个类需要调用另一个类,则由第三方转发这个调用。
外观模式完美的体现了依赖倒转原则和迪米特法则。
我们用经理人购买股票基金来进行说明,普通客户是不懂得投资股票和基金的,但是我们可以交给经理人,这样,我们直接面向经理人,不用了解细节。
外观模式结构图如下:
代码如下
class Fund1{
public void Method1(){
System.out.println("第一种基金");
}
}
class Fund2{
public void Method2(){
System.out.println("第一种基金");
}
}
class Stock1{
public void Method3(){
System.out.println("第一种股票");
}
}
class Stock2{
public void Method4(){
System.out.println("第二种股票");
}
}
/*
* 外观类
* 与客户(端)直接作用
*/
class Manager{
private Fund1 fund1;
private Fund2 fund2;
private Stock1 stock1;
private Stock2 stock2;
public Manager(){
fund1 = new Fund1();
fund2 = new Fund2();
stock1 = new Stock1();
stock2 = new Stock2();
}
public void MethodA(){
stock1.Method3();
stock2.Method4();
}
public void MethodB(){
fund1.Method1();
fund2.Method2();
stock2.Method4();
}
}
public class Client{
public static void main(String[] args) {
// TODO Auto-generated method stub
Manager manager = new Manager();
System.out.println("经理人为小红购买的基金和股票:");
manager.MethodA();
System.out.println("经理人为小强购买的基金和股票:");
manager.MethodB();
}
}
运行结果:
经理人为小红购买的基金和股票:
第一种股票
第二种股票
经理人为小强购买的基金和股票:
第一种基金
第一种基金
第二种股票
在讲外观模式前,我们引入两个设计模式中的两个重要原则:依赖倒转原则和迪米特法则。
依赖倒转原则:抽象不依赖细节,细节要依赖抽象。简单讲,就是面向接口编程,而不面向实现编程。
迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中的一个类需要调用另一个类,则由第三方转发这个调用。
外观模式完美的体现了依赖倒转原则和迪米特法则。
我们用经理人购买股票基金来进行说明,普通客户是不懂得投资股票和基金的,但是我们可以交给经理人,这样,我们直接面向经理人,不用了解细节。
外观模式结构图如下:
代码如下
class Fund1{
public void Method1(){
System.out.println("第一种基金");
}
}
class Fund2{
public void Method2(){
System.out.println("第一种基金");
}
}
class Stock1{
public void Method3(){
System.out.println("第一种股票");
}
}
class Stock2{
public void Method4(){
System.out.println("第二种股票");
}
}
/*
* 外观类
* 与客户(端)直接作用
*/
class Manager{
private Fund1 fund1;
private Fund2 fund2;
private Stock1 stock1;
private Stock2 stock2;
public Manager(){
fund1 = new Fund1();
fund2 = new Fund2();
stock1 = new Stock1();
stock2 = new Stock2();
}
public void MethodA(){
stock1.Method3();
stock2.Method4();
}
public void MethodB(){
fund1.Method1();
fund2.Method2();
stock2.Method4();
}
}
public class Client{
public static void main(String[] args) {
// TODO Auto-generated method stub
Manager manager = new Manager();
System.out.println("经理人为小红购买的基金和股票:");
manager.MethodA();
System.out.println("经理人为小强购买的基金和股票:");
manager.MethodB();
}
}
运行结果:
经理人为小红购买的基金和股票:
第一种股票
第二种股票
经理人为小强购买的基金和股票:
第一种基金
第一种基金
第二种股票
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 六、设计模式——外观模式
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解