设计模式-2-抽象工厂方法
来源:互联网 发布:21cn企业邮箱域名 编辑:程序博客网 时间:2024/06/08 11:12
一、概述
1-抽象工厂提供一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体的实现类2-设计原则(1)开闭(2)多用组合,少继承抽象工厂和工厂方法的区别(1)工厂通过继承解耦;抽象工厂通过组合解耦(2)工厂用于创建一个抽象产品,具体的工厂用于创建具体的产品;抽象工厂用于创建一个产品家族的抽象类型3-使用场合(1)创建产品家族(2)提供一个产品库,并只想显示器接口而非实现
========抽象食物接口package SheJiMoShiNaDianShi.AbstractFactory.model; /** * Created by hjw on 16/8/28. * 食物辅助接口,用于实现共性,如打印信息 */public interface IFood { public void printMessage();} ========抽象食物 package SheJiMoShiNaDianShi.AbstractFactory.model; /** * Created by hjw on 16/8/28. * 抽象的食物对象 */public abstract class AbstractBaseFood { //类别 protected String kind; //数量 protected int num; //单价 protected float price; //总价 public float totalPrice() { return this.num * this.price; }} ========抽象食物鸡翅package SheJiMoShiNaDianShi.AbstractFactory.model; /** * Created by hjw on 16/8/28. */public abstract class ChickenWings extends AbstractBaseFood implements IFood{ @Override public void printMessage() { System.out.println("----"+this.kind+"风味鸡翅,\t 单价:"+this.price + ", \t数量:"+this.num+ ", \t总计:"+this.totalPrice()); }} ========抽象食物汉堡package SheJiMoShiNaDianShi.AbstractFactory.model; /** * Created by hjw on 16/8/28. * 创建不同食物的抽象类 */public abstract class Hamburg extends AbstractBaseFood implements IFood{ @Override public void printMessage() { System.out.println("----"+this.kind+"风味汉堡,\t 单价:"+this.price + ", \t数量:"+this.num+ ", \t总计:"+this.totalPrice()); }} ========具体食物鸡翅package SheJiMoShiNaDianShi.AbstractFactory.model.kfc; import SheJiMoShiNaDianShi.AbstractFactory.model.ChickenWings; /** * Created by hjw on 16/8/28. * 鸡翅实现类 */public class ChinaChickenWings extends ChickenWings { /** * 构造函数 * @param kind * @param price * @param num */ public ChinaChickenWings(String kind,float price,int num) { this.kind = kind; this.price = price; this.num = num; } } ========具体食物汉堡package SheJiMoShiNaDianShi.AbstractFactory.model.kfc; import SheJiMoShiNaDianShi.AbstractFactory.model.Hamburg; /** * Created by hjw on 16/8/28. * 创建具体的食物 */public class ChinaHamburg extends Hamburg { /** * 构造函数 * @param kind * @param price * @param num */ public ChinaHamburg(String kind,float price,int num) { this.kind = kind; this.price = price; this.num = num; }} ========抽象工厂接口package SheJiMoShiNaDianShi.AbstractFactory.itf; import SheJiMoShiNaDianShi.AbstractFactory.model.ChickenWings;import SheJiMoShiNaDianShi.AbstractFactory.model.Hamburg; /** * Created by hjw on 16/8/28. * 抽象工厂接口 */public interface IKfcFactory { public Hamburg creatHamburg(String kind,float price,int num); public ChickenWings creatChichenWings(String kind,float price,int num);} ========具体工厂package SheJiMoShiNaDianShi.AbstractFactory.itf; import SheJiMoShiNaDianShi.AbstractFactory.model.ChickenWings;import SheJiMoShiNaDianShi.AbstractFactory.model.Hamburg;import SheJiMoShiNaDianShi.AbstractFactory.model.kfc.ChinaChickenWings;import SheJiMoShiNaDianShi.AbstractFactory.model.kfc.ChinaHamburg; /** * Created by hjw on 16/8/28. * 具体的工厂 */public class ChinaKfcFactory implements IKfcFactory { @Override public Hamburg creatHamburg(String kind, float price, int num) { return new ChinaHamburg(kind, price, num); } @Override public ChickenWings creatChichenWings(String kind, float price, int num) { return new ChinaChickenWings(kind, price, num); }} =====客户类-通过工厂暴露的方法实现具体对象的创建package SheJiMoShiNaDianShi.AbstractFactory.custom; import SheJiMoShiNaDianShi.AbstractFactory.itf.IKfcFactory;import SheJiMoShiNaDianShi.AbstractFactory.model.ChickenWings;import SheJiMoShiNaDianShi.AbstractFactory.model.Hamburg; /** * Created by hjw on 16/8/28. * 客户类-通过工厂暴露的方法实现具体对象的创建 */public class Custom { IKfcFactory iKfcFactory; public Custom(IKfcFactory iKfcFactory) { this.iKfcFactory = iKfcFactory; } public float orderHamburg(String kind, float price, int num){ Hamburg hamburg = iKfcFactory.creatHamburg(kind, price, num); hamburg.printMessage(); return hamburg.totalPrice(); } public float orderChickenWings(String kind, float price, int num){ ChickenWings chickenWings = iKfcFactory.creatChichenWings(kind, price, num); chickenWings.printMessage(); return chickenWings.totalPrice(); }} =====apppackage SheJiMoShiNaDianShi.AbstractFactory; import SheJiMoShiNaDianShi.AbstractFactory.custom.Custom;import SheJiMoShiNaDianShi.AbstractFactory.itf.ChinaKfcFactory;import SheJiMoShiNaDianShi.AbstractFactory.itf.IKfcFactory; /** * Created by hjw on 16/8/28. */public class MainApp { public static void main(String[] args) { IKfcFactory iKfcFactory = new ChinaKfcFactory(); Custom custom = new Custom(iKfcFactory); float hamburgMoney = custom.orderHamburg("麻辣", 1.2f, 2); float chichenWingsMoney = custom.orderChickenWings("奥尔良", 2, 4); System.out.println("总计: " + (hamburgMoney + chichenWingsMoney)); }}
0 0
- 设计模式-2-抽象工厂方法
- 设计模式--工厂方法、抽象工厂模式
- 设计模式-抽象工厂方法
- 设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
- 设计模式:工厂方法和抽象工厂
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(2)
- 设计模式(2)工厂模式、工厂方法模式、抽象工厂模式
- 设计模式--工厂模式(工厂方法、抽象工厂)
- 设计模式 - 工厂模式(简单,工厂方法,抽象工厂)
- C#设计模式:抽象工厂方法模式
- 设计模式之抽象工厂方法模式
- 设计模式之抽象工厂方法模式
- 设计模式之《抽象工厂方法模式》
- 设计模式-工厂方法 简单工厂 抽象工厂 模板方法
- 设计模式(2) - 抽象工厂
- 设计模式2-抽象工厂
- 【设计模式】4. 工厂方法模式、抽象工厂模式
- 设计模式之工厂方法模式与抽象工厂模式
- 【LeetCode81-90】三道链表,两道找最大面积的hard题,一道二叉树的hard题和一些找自信题……
- 改进后的扫雷
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 第一次博客学习笔记
- 跨域sso实现
- 设计模式-2-抽象工厂方法
- 有关Linux内核分析课程的总结
- 百度地图根据省市县定位,经纬度和地址信息互相转化JS示例
- 【阿里云服务器】在Centos6.5上安装与配置MySQL
- poj 3321_Apple Tree_线段树
- 什么是端口? 端口的通俗经典讲解(整理自网络)
- Hibernate执行过程
- 16华为网络技术大赛模拟题答案详解
- 数据结构——树