zoukankan      html  css  js  c++  java
  • 设计模式笔记之六 (适配器模式)

    适配器模式

    适配器模式就是将一个类的接口转变成另一个客户类需要的接口,使两个类都不用改动各自的逻辑。通俗点就是亡羊补牢。

    我们的实验室最近异常尴尬,起因是我们实验室正在环球展出我们的产品,其中有个环节是展示产品出厂时的状态。

    在展示兽人和人妖的时候没什么问题,但是展示正常男人和女人的时候,却通不过国家有关部门的检查,因为我们的产品出厂的时候都是红果果的啊。

    class Ren {
    }
    
    class RenYao extends Ren {
        public String head = "人妖头";
        public String body = "人妖身体 - 无"; // 大家都知道什么是‘无’
        public String foot = "人妖脚";
        
        public void show() {
            System.out.println(this.head + " " + this.body + " " + this.foot);
        }
    }
    class ShouRen extends Ren {
        public String head = "兽人头";
        public String body = "兽人身体 - 异种"; // 只要是不同就没关系,也没见小狗因为红果果被有关部门抓
        public String foot = "兽人脚";
        
        public void show() {
            System.out.println(this.head + " " + this.body + " " + this.foot);
        }
    }
    class NanRen extends Ren {
        public String head = "男人头";
        public String body = "男人身体 - 男性";
        public String foot = "男人脚";
        
        public void show() {
            System.out.println(this.head +  " " + this.foot); // 不能红果果的展出
        }
    }
    class NvRen extends Ren {
        public String head = "女人头";
        public String body = "女人身体 - 女性";
        public String foot = "女人脚";
        
        public void show() {
            System.out.println(this.head + " " + this.foot); // 不能红果果的展出
        }
    }
    
    public class Adapter {
        public static void main(String[] args) {
            new ShouRen().show();//展示全部
            new RenYao().show();//展示全部
            new NanRen().show();//只展示头脚--这与我们的初衷不合
            new NvRen().show();//只展示头脚--这与我们的初衷不合
        }
    }

    这是我们遇到最大的尴尬,我们的产品已经造好了,但是我们展出的时候,发现有些展品却不能用,而且这两个因素(类)都不能轻易改变。此时我们研究所的某个太阳国文艺片爱好者说到,这个问题好解决啊,太阳国就有很好的先例啊,他们的文艺片分为外销型和内销型,当外销型的片子想转内销的话,只要上个马就行(好吧,这里给广大丑矮穷搓撸的岛国爱情动作片片友们普及下知识:岛国的内销片子是不允许裸露XXX的,只有外销欧美的片子可以,所以出口转内销的话需要一些后期的上码处理的,当然也有坊间零售,不公映的就没人管的着了)。

    这下我们一下子都懂了。

    class Ren {
    }
    
    class RenYao extends Ren {
        public String head = "人妖头";
        public String body = "人妖身体 - 无"; // 大家都知道什么是‘无’
        public String foot = "人妖脚";
        
        public void show() {
            System.out.println(this.head + " " + this.body + " " + this.foot);
        }
    }
    class ShouRen extends Ren {
        public String head = "兽人头";
        public String body = "兽人身体 - 异种"; // 只要是不同就没关系,也没见小狗因为红果果被有关部门抓
        public String foot = "兽人脚";
        
        public void show() {
            System.out.println(this.head + " " + this.body + " " + this.foot);
        }
    }
    class NanRen extends Ren {
        public String head = "男人头";
        public String body = "男人身体 - 男性";
        public String foot = "男人脚";
        
        public void show() {
            System.out.println(this.head +  " " + this.foot); // 不能红果果的展出
        }
    }
    class NvRen extends Ren {
        public String head = "女人头";
        public String body = "女人身体 - 女性";
        public String foot = "女人脚";
        
        public void show() {
            System.out.println(this.head + " " + this.foot); // 不能红果果的展出
        }
    }
    
    class NanRenAdapter {
        NanRen nr;
        public NanRenAdapter() {
            nr = new NanRen();
        }
        public void show() {
            System.out.println(nr.head + " " + "打码的:" + nr.body + " " + nr.foot); // 打码
        }
    }
    class NvRenAdapter {
        NvRen nr;
        public NvRenAdapter() {
            nr = new NvRen();
        }
        public void show() {
            System.out.println(nr.head + " " + "打码的:" + nr.body + " " + nr.foot); // 打码
        }
    }
    
    public class Adapter {
        public static void main(String[] args) {
            new ShouRen().show();//展示全部
            new RenYao().show();//展示全部
            new NanRenAdapter().show();//展示全部-打码
            new NvRenAdapter().show();//展示全部-打码
        }
    }

    适配器模式是最不推荐使用的模式,只要有可能统一接口,就应该在设计阶段统一。

    适配器模式简直都不是设计模式,而是维护模式。但现今的IT工作者们做的大都数都是在前辈们的代码尸体上缝缝补补,所以轻易不要改动前辈们的代码,因为你不知道是不是还有别人在使用这个接口,所以使用适配器模式吧!

    亡羊补牢总比不补好。

  • 相关阅读:
    firstResponder
    形而上学
    du -h
    数据本地存贮与数据结构(对象)
    RFC
    oc语言源代码
    HTTP1.1协议中文版-RFC2616
    如何提高团队协作的效率
    iOS应用架构谈 开篇
    nginx版本如何选择?
  • 原文地址:https://www.cnblogs.com/biglaojiang/p/3075888.html
Copyright © 2011-2022 走看看