(1)创建一个接口
public interface UsbSell {float sell(float price);}
这里面是厂家和商家都要完成的功能。
(2)创建工厂类
//厂家,不接受用户的单独购买,需要商家public class UsbFactory implements UsbSell {@Overridepublic float sell(float price) {System.out.println("目标类");return 70;//厂家的U盘价格}}
在工厂类中定义的是U盘的出厂价,但是改价格是不能被普通的消费者使用的,只能是商家使用。
(3)创建商家类(代理类)
淘宝类:
public class TaoBao implements UsbSell {//声明商家代理的是哪一个厂家private UsbSell factory=new UsbFactory();@Overridepublic float sell(float price) {//调用目标方法,增强功能,增加价格,优惠券float p=factory.sell(price);float p1=p+25;System.out.println("返回5元优惠券");return p1;}}
微商类:
public class WeiShang implements UsbSell {private UsbSell factory = new UsbFactory();@Overridepublic float sell(float price) {//调用目标方法,增强功能float p = factory.sell(price);float p2=p+1;return p2;}}
这两个类都实现了与工厂类相同的接口,增强了工程类(目标类)的方法。
(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)缺点
当目标类增多了,代理类也需要增加(例如:上例中创建了一个工厂类,那么该类只能代表一个工厂,当建立了其它品牌的工厂后,还需要为该工厂创建代理类)。
当接口的方法增加或修改的时候,很多类都需要修改。因为,目标类和代理类都实现了相同的接口。
