Factory and Decorator (工厂模式与装饰者模式)

来源:互联网 发布:mac区域截屏保存在哪里 编辑:程序博客网 时间:2024/05/29 16:53

我前面的博文已经讲解了装饰者模式,如果你对这个模式还不太了解,建议先去看一下装饰者模式再来看 这篇工厂模式与装饰这模式组合的组合模式。我还是以生产手机为例,只是这次生产手机我是通过工厂来生产的。

案例是这样的。华为有两款手机分别为PhoneI 与 PhoneII 由于某种原因,PhoneI 生产的时候必须带一个电磁,PhoneI I生产的时候必须搭配一个充电器和电磁。下面我将用两个工厂分别生产者两种手机,并用不同数量的装饰品去装(将电池和充电器看做是装饰品)饰手机。


先来看看如何创建工厂的 。

1 新建一个工厂接口。所有的工厂都必须实现这个接口

public interface Factory {IPhone creatPhone();}
2 新建两个具体的工厂并实现Factory接口

/** * 华为专门生产PhoneI类型手机的工厂,该工厂生产的手机包括了一个电池 */public class PhoneIFactory implements Factory {@Overridepublic IPhone creatPhone() {return new Battery(new PhoneI());}}/** * 华为专门生产PhoneII类型手机的工厂,该工厂生产的手机包括了一个充电器和一个电池 */public class PhoneIIFactory implements Factory{@Overridepublic IPhone creatPhone() {return new Battery(new Charger(new PhoneII()));}}

3 工厂已经建好了,我们再来新建产品,首先新建一个 手机和装饰品的公共接口


public interface IPhone {String getDescription();double cost();}

4 新建两个手机类

public class PhoneI implements IPhone{private String name;private double wight;@Overridepublic String getDescription() {return "华为I";}@Overridepublic double cost() {return 2399;}}public class PhoneII implements IPhone{private String name;private double wight;@Overridepublic String getDescription() {return "华为II";}@Overridepublic double cost() {return 3999;}}

5 新建两个装饰品(电池与充电器)


public class Battery implements IPhone{IPhone phone;public Battery(IPhone phone){this.phone = phone;}@Overridepublic String getDescription() {return "华为手机通用电池,+"+phone.getDescription();}@Overridepublic double cost() {return 200+phone.cost();}}public class Charger implements IPhone{IPhone phone;public Charger(IPhone phone){this.phone = phone;}@Overridepublic String getDescription() {return "华为手机通用充电器,+"+phone.getDescription();}@Overridepublic double cost() {return 100+phone.cost();}}

6 新建测试类

public class Test {public static void main(String...strings){//生产模型一的手机Factory factory1 = new PhoneIFactory();IPhone phoneI1 = factory1.creatPhone();System.out.println(phoneI1.getDescription()+";总价:"+phoneI1.cost());//生产模型二的手机Factory factory2 = new PhoneIIFactory();IPhone phoneII1 = factory2.creatPhone();System.out.println(phoneII1.getDescription()+";总价:"+phoneII1.cost());}}

输出结果:

华为手机通用电池,+华为I;总价:2599.0
华为手机通用电池,+华为手机通用充电器,+华为II;总价:4299.0


看来我们已经从工厂得到了两种不同类型的手机了。





原创粉丝点击