2021-07-29

适配器模式(对象适配器学习笔记)

  1. 意图

  将一个类的接口装换成客户希望的另外一个接口

  2. 动机

  有时,为复用而设计的工具类不能够被复用仅仅是因为它的接口与专业应用领域所需要的接口不匹配。Adapter经常还要负责提供那些被匹配的类所没有提供的功能(有点类似装饰模式)

  3. 适用性

  • 想使用一个已经存在的类,而它的接口不符合你的需求
  • 想要创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作
  • 复用一些类,它们处于同一继承体系,并且又有了一些共同的方法,但是这些共同的方法不是所有这一继承体系中的子类所共有的。不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口

  4. 结构

  

  5. 效果

  1) 允许一个Adapter与多个Adaptee——Adaptee本身以及它的所有子类——同时工作。Adapter可以一次给所有的Adaptee添加功能

  2) 使得重定义Adapter的行为比较困难。这就需要生成Adaptee的子类,并且使得Adapter引用这个子类而不是Adaptee本身

  3) 单一职责原则_你可以将接口或数据转换代码从程序主要业务逻辑中分离

  4) 开闭原则。 只要客户端代码通过客户端接口与适配器进行交互, 你就能在不修改现有客户端代码的情况下在程序中添加新类型的适配器

  6. 代码实现

  让方钉适配圆孔

  round/RoundHole.java: 圆孔

package adapter.round;/** * @author GaoMing * @date 2021/7/12 - 9:07 * RoundHoles are compatible with RoundPegs. */public class RoundHole { private double radius; public RoundHole(double radius) {  this.radius = radius; } public double getRadius() {  return radius; } public boolean fits(RoundPeg peg) {  boolean result;  result = (this.getRadius() >= peg.getRadius());  return result; }}

  round/RoundPeg.java: 圆钉  

package adapter.round;/** * @author GaoMing * @date 2021/7/12 - 9:07 */public class RoundPeg { private double radius; public RoundPeg() {} public RoundPeg(double radius) {  this.radius = radius; } public double getRadius() {  return radius; }}

  square/SquarePeg.java: 方钉

package adapter.square;/** * @author GaoMing * @date 2021/7/12 - 9:08 * SquarePegs are not compatible with RoundHoles (they were implemented by * previous development team). But we have to integrate them into our program. */public class SquarePeg { private double width; public SquarePeg(double width) {  this.width = width; } public double getWidth() {  return width; } public double getSquare() {  double result;  result = Math.pow(this.width, 2);  return result; }}

  adapters/SquarePegAdapter.java: 方钉到圆孔的适配器

package adapter.adapters;import adapter.round.RoundPeg;import adapter.square.SquarePeg;/** * @author GaoMing * @date 2021/7/12 - 9:25 * Adapter allows fitting square pegs into round holes. */public class SquarePegAdapter extends RoundPeg { private SquarePeg peg; public SquarePegAdapter(SquarePeg peg) {  this.peg = peg; } @Override public double getRadius() {  double result;  // Calculate a minimum circle radius, which can fit this peg.  result = (Math.sqrt(Math.pow((peg.getWidth() / 2), 2) * 2));  return result; }}

  Demo.java: 客户端代码

package adapter;import adapter.adapters.SquarePegAdapter;import adapter.round.RoundHole;import adapter.round.RoundPeg;import adapter.square.SquarePeg;/** * @author GaoMing * @date 2021/7/12 - 9:07 */public class Demo { public static void main(String[] args) {  // Round fits round, no surprise.  RoundHole hole = new RoundHole(5);  RoundPeg rpeg = new RoundPeg(5);  if (hole.fits(rpeg)) {   System.out.println("Round peg r5 fits round hole r5.");  }  SquarePeg smallSqPeg = new SquarePeg(2);  SquarePeg largeSqPeg = new SquarePeg(20);  // hole.fits(smallSqPeg); // Won't compile.  // Adapter solves the problem.  SquarePegAdapter smallSqPegAdapter = new SquarePegAdapter(smallSqPeg);  SquarePegAdapter largeSqPegAdapter = new SquarePegAdapter(largeSqPeg);  if (hole.fits(smallSqPegAda......

原文转载:http://www.shaoqun.com/a/892294.html

跨境电商:https://www.ikjzd.com/

贸发局:https://www.ikjzd.com/w/1621

kili:https://www.ikjzd.com/w/238

立刻网:https://www.ikjzd.com/w/2323


1.意图  将一个类的接口装换成客户希望的另外一个接口  2.动机  有时,为复用而设计的工具类不能够被复用仅仅是因为它的接口与专业应用领域所需要的接口不匹配。Adapter经常还要负责提供那些被匹配的类所没有提供的功能(有点类似装饰模式)  3.适用性想使用一个已经存在的类,而它的接口不符合你的需求想要创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协
zen cart:https://www.ikjzd.com/w/1282
瀚霖:https://www.ikjzd.com/w/2345
四川小吃-夫妻肺片 - :http://www.30bags.com/a/402221.html
四川小寨子沟旅游攻略:http://www.30bags.com/a/421141.html
四川新春旅游季完美收官 :http://www.30bags.com/a/409238.html
四川新添12个国家4A级旅游景区:http://www.30bags.com/a/424078.html
一女多男两根同时进去小说 娇嫩的被三根粗大的:http://lady.shaoqun.com/a/248205.html
穿裙子在教室和男友做了 男朋友说穿裙子更好干活:http://lady.shaoqun.com/a/248350.html
深圳宝安科技馆8月展览汇总(持续更新):http://www.30bags.com/a/517601.html
2021时尚深圳展蝶讯馆展览好看吗:http://www.30bags.com/a/517602.html
2021时尚深圳蝶讯馆观展攻略:http://www.30bags.com/a/517603.html
深圳欢乐谷夏浪音乐节有朱星杰吗:http://www.30bags.com/a/517604.html

No comments:

Post a Comment