wordpress 建两个网站,在深圳注册一个公司需要多少钱,开一个网站建设公司需要什么,网站建设合集外观模式
外观模式#xff08;Facade Pattern#xff09;隐藏系统的复杂性#xff0c;并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口#xff0c;来隐藏系统的复杂性。 举个例子 #xff1a;就像电脑的usb接口#xff0c;自己内部实现了复杂…外观模式
外观模式Facade Pattern隐藏系统的复杂性并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口来隐藏系统的复杂性。 举个例子 就像电脑的usb接口自己内部实现了复杂的usb协议自己却只提供了接口让我们能够即插即用向我们屏蔽了底层协议的细节。
介绍
意图为子系统中的一组接口提供一个一致的界面外观模式定义了一个高层接口这个接口使得这一子系统更加容易使用。
主要解决降低访问复杂系统的内部子系统时的复杂度简化客户端之间的接口。
应用实例 去医院看病可能要去挂号、门诊、划价、取药让患者或患者家属觉得很复杂如果有提供接待人员只让接待人员来处理就很方便。
优点 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点不符合开闭原则如果要改东西很麻烦继承重写都不合适。
实现
我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。下一步是定义一个外观类 ShapeMaker。 我们采用把所有的实现类封装在shapemaker由shapemaker提供统一的接口使我们能够方便调用。
ShapeMaker 类使用实体类来代表用户对这些类的调用。FacadePatternDemo 类使用 ShapeMaker 类来显示结果。
外观模式的 UML 图
java
步骤 1 创建一个接口。 Shape.java
public interface Shape {void draw();
}步骤 2 创建实现接口的实体类。
Rectangle.java
public class Rectangle implements Shape {Overridepublic void draw() {System.out.println(Rectangle::draw());}
}Square.java
public class Square implements Shape {Overridepublic void draw() {System.out.println(Square::draw());}
}Circle.java
public class Circle implements Shape {Overridepublic void draw() {System.out.println(Circle::draw());}
}步骤 3 创建一个外观类,这个外观类中封装装了上述实现类的方法这样我们就可以通过外观类中提供的方法间接调用底层继承shape抽象类的实体类实现的方法。
ShapeMaker.java
public class ShapeMaker {private Shape circle;private Shape rectangle;private Shape square;public ShapeMaker() {circle new Circle();rectangle new Rectangle();square new Square();}public void drawCircle(){circle.draw();}public void drawRectangle(){rectangle.draw();}public void drawSquare(){square.draw();}
}步骤 4 使用该外观类画出各种类型的形状,由下面的代码我们可以看到我们可以调用shapemaker的方法间接调用底层实现类的方法。
FacadePatternDemo.java
public class FacadePatternDemo {public static void main(String[] args) {ShapeMaker shapeMaker new ShapeMaker();shapeMaker.drawCircle();shapeMaker.drawRectangle();shapeMaker.drawSquare(); }
}步骤 5 执行程序输出结果
Circle::draw()
Rectangle::draw()
Square::draw()rust
rsut实现的大致思路和java相同就不再赘述过程。
// 创建形状接口
trait Shape {fn draw(self);
}
struct Rectangle {}
struct Circle{}
struct Square{}
impl Shape for Rectangle {fn draw(self) {println!(Shape: Rectangle);}
}
impl Shape for Circle {fn draw(self) {println!(Shape: Circle);}
}
impl Shape for Square {fn draw(self) {println!(Shape: Square);}
}
// 创建外观
struct ShapeMaker{rectangle:Rectangle,circle:Circle,square:Square
}
impl ShapeMaker {fn draw_rectangle(self) {self.rectangle.draw();}fn draw_circle(self) {self.circle.draw();}fn draw_square(self) {self.square.draw();}
}
fn main() {//创建接口实体let shape_makerShapeMaker{rectangle:Rectangle { },circle:Circle { },square:Square { }};// 体现接口抽象实现的各种方法shape_maker.draw_circle();shape_maker.draw_rectangle();shape_maker.draw_square();
}rust仓库
https://github.com/onenewcode/design.git 本教程项目在bin文件夹下的facade.rs文件中