(1)创建一个接口

    1. public interface UsbSell {
    2. float sell(float price);
    3. }

    这里面是厂家和商家都要完成的功能。

    (2)创建工厂类

    1. //厂家,不接受用户的单独购买,需要商家
    2. public class UsbFactory implements UsbSell {
    3. @Override
    4. public float sell(float price) {
    5. System.out.println("目标类");
    6. return 70;//厂家的U盘价格
    7. }
    8. }

    在工厂类中定义的是U盘的出厂价,但是改价格是不能被普通的消费者使用的,只能是商家使用。

    (3)创建商家类(代理类)
    淘宝类:

    1. public class TaoBao implements UsbSell {
    2. //声明商家代理的是哪一个厂家
    3. private UsbSell factory=new UsbFactory();
    4. @Override
    5. public float sell(float price) {//调用目标方法,增强功能,增加价格,优惠券
    6. float p=factory.sell(price);
    7. float p1=p+25;
    8. System.out.println("返回5元优惠券");
    9. return p1;
    10. }
    11. }


    微商类:

    1. public class WeiShang implements UsbSell {
    2. private UsbSell factory = new UsbFactory();
    3. @Override
    4. public float sell(float price) {//调用目标方法,增强功能
    5. float p = factory.sell(price);
    6. float p2=p+1;
    7. return p2;
    8. }
    9. }


    这两个类都实现了与工厂类相同的接口,增强了工程类(目标类)的方法。
    4)创建测试**类(普通消费者)**

    public class ShopMain {
        public static void main(String[] args) {
    
            TaoBao taoBao=new TaoBao();
            float price=taoBao.sell(100);
            System.out.println("淘宝的销售价:"+price);
        }
    }
    

    输出结果:

    目标类 返回5元优惠券 淘宝的销售价:95.0


    (5)优点

    • 实现简单
    • 容易理解


    (6)缺点
    当目标类增多了,代理类也需要增加(例如:上例中创建了一个工厂类,那么该类只能代表一个工厂,当建立了其它品牌的工厂后,还需要为该工厂创建代理类)。
    当接口的方法增加或修改的时候,很多类都需要修改。因为,目标类和代理类都实现了相同的接口。