南京中小企业网站制作,wordpress 评论id,阿里云企航域名购买方式,系统优化有什么用Go和Java实现外观模式
下面我们通过一个构造各种形状的案例来说明外观模式的使用。
1、外观模式
外观模式隐藏系统的复杂性#xff0c;并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型
模式#xff0c;它向现有的系统添加一个接口#xff…Go和Java实现外观模式
下面我们通过一个构造各种形状的案例来说明外观模式的使用。
1、外观模式
外观模式隐藏系统的复杂性并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型
模式它向现有的系统添加一个接口来隐藏系统的复杂性。
这种模式涉及到一个单一的类该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 意图为子系统中的一组接口提供一个一致的界面外观模式定义了一个高层接口这个接口使得这一子系统 更加容易使用。 主要解决降低访问复杂系统的内部子系统时的复杂度简化客户端之间的接口。 何时使用1、客户端不需要知道系统内部的复杂联系整个系统只需提供一个接待员即可。 2、定义系统 的入口。 如何解决客户端不与系统耦合外观类与系统耦合。 关键代码在客户端和复杂系统之间再加一层这一层将调用顺序、依赖关系等处理好。 应用实例1、去医院看病可能要去挂号、门诊、划价、取药让患者或患者家属觉得很复杂如果有提供 接待人员只让接待人员来处理就很方便。 2、JAVA 的三层开发模式。 优点1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。 缺点不符合开闭原则如果要改东西很麻烦继承重写都不合适。 使用场景1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来 的风险。 注意事项在层次化结构中可以使用外观模式定义系统中每一层的入口。 适用性 当你要为一个复杂子系统提供一个简单接口时子系统往往因为不断演化而变得越来越复杂。大多数模式使用 时都会产生更多更小的类这使得子系统更具可重用性也更容易对子系统进行定制但这也给那些不需要定 制子系统的用户带来一些使用上的困难。Facade 可以提供一个简单的缺省视图这一视图对大多数用户来说 已经足够而那些需要更多的可定制性的用户可以越过 facade 层。 客户程序与抽象类的实现部分之间存在着很大的依赖性引入 facade 将这个子系统与客户以及其他的子系统 分离可以提高子系统的独立性和可移植性。 当你需要构建一个层次结构的子系统时使用 facade 模式定义子系统中每层的入口点如果子系统之间是相 互依赖的你可以让它们仅通过 facade 进行通讯从而简化了它们之间的依赖关系。
2、Go实现外观模式
package facade// Shape
type Shape interface {draw()
}package facadeimport fmt// Circle
type Circle struct {
}func (circle *Circle) draw() {fmt.Println(Circle::draw())
}package facadeimport fmt// Rectangle
type Rectangle struct {
}func (rectangle *Rectangle) draw() {fmt.Println(Rectangle::draw())
}package facadeimport fmt// Square
type Square struct {
}func (Square *Square) draw() {fmt.Println(Square::draw())
}package facade// ShapeFacade
type ShapeFacade struct {circle Circlerectangle Rectanglesquare Square
}func NewShapeFacade() ShapeFacade {return ShapeFacade{circle: Circle{},rectangle: Rectangle{},square: Square{},}
}func (shapeFacade *ShapeFacade) DrawCircle() {shapeFacade.circle.draw()
}func (shapeFacade *ShapeFacade) DrawRectangle() {shapeFacade.rectangle.draw()
}func (shapeFacade *ShapeFacade) DrawSquare() {shapeFacade.square.draw()
}# 输出
Circle::draw()
Rectangle::draw()
Square::draw()3、Java实现外观模式
package facade;// Shape
public interface Shape {void draw();
}package facade;// Rectangle
public class Rectangle implements Shape{Overridepublic void draw() {System.out.println(Rectangle::draw());}
}package facade;// Circle
public class Circle implements Shape{Overridepublic void draw() {System.out.println(Circle::draw());}
}package facade;// Square
public class Square implements Shape{Overridepublic void draw() {System.out.println(Square::draw());}
}package facade;// ShapeFacade
public class ShapeFacade {private Shape circle;private Shape rectangle;private Shape square;public ShapeFacade() {circle new Circle();rectangle new Rectangle();square new Square();}public void drawCircle(){circle.draw();}public void drawRectangle(){rectangle.draw();}public void drawSquare(){square.draw();}
}package facade;public class Test {public static void main(String[] args) {ShapeFacade shapeFacade new ShapeFacade();shapeFacade.drawCircle();shapeFacade.drawRectangle();shapeFacade.drawSquare();}
}# 输出
Circle::draw()
Rectangle::draw()
Square::draw()