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
看来我们已经从工厂得到了两种不同类型的手机了。
阅读全文
0 0
- Factory and Decorator (工厂模式与装饰者模式)
- Decorator 装饰者模式
- 装饰者模式(Decorator)
- Decorator 装饰者模式
- 装饰者模式(Decorator)
- decorator装饰者模式
- 装饰者模式(Decorator)
- Decorator 装饰者模式
- 装饰者模式--Decorator
- 装饰者模式(Decorator)
- 装饰者(Decorator)模式
- 装饰者模式decorator
- Decorator 装饰者模式
- 装饰者模式-Decorator
- 装饰者模式Decorator
- 装饰者模式Decorator
- 装饰者模式Decorator
- 装饰者模式(Decorator):
- 【Leetcode】【python】Binary Tree Zigzag Level Order Traversal
- 计算编码的整数方法
- vim跳转命令
- vim ctags and quickfix
- Ubuntu 16.04 RTL8111/8168/8411 不能上网 经常断网解决办法 Author 时鹏亮 | 11/18/2016 = =这奇葩情况发生在从14.04升级到16.04之后,开始以
- Factory and Decorator (工厂模式与装饰者模式)
- 内存溢出的多种原因及优化方法
- okhttp3使用
- 网络安全法与LogSec日志安全大数据审计平台
- LogSec金融行业营业厅终端安全解决方案
- 渗透测试工具(sqlmap)
- 威胁情报助力SIEM平台识别安全威胁
- Java内存溢出和内存泄露
- swiper-滑块视图容器