博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂模式
阅读量:6952 次
发布时间:2019-06-27

本文共 3546 字,大约阅读时间需要 11 分钟。

hot3.png

一 产品等级和产品族

162301_Qpu3_3218528.png

产品等级:Iphone4,Iphone5,Iphone6都是Iphone系列。属于同一产品等级(产品等级结构即产品的继承结构

产品族:XiaoMi4 和 IPhone4 是同一个产品族(产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品

二 抽象工厂模式与工厂方法模式的区别

抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构

例如

164006_nyko_3218528.png

用抽象工厂生产Iphone 和 XiaoMi 两个品牌的手机(两个产品等级)

代码如下

手机接口

package factory;/** * Created by dingshuangkun on 2018/1/26. */public interface Phone {    void producePhone();}

 

Iphone 手机接口

package factory;/** * Created by dingshuangkun on 2018/1/26. */public interface Iphone extends Phone {    void produceIphone();    @Override    default void producePhone(){        produceIphone();    }}
package factory.impl;import factory.Iphone;/** * Created by dingshuangkun on 2018/1/26. */public class Iphone4 implements Iphone {    @Override    public void produceIphone() {        System.out.println("------生产Iphone4--------");    }}

 

package factory.impl;import factory.Iphone;/** * Created by dingshuangkun on 2018/1/26. */public class Iphone5 implements Iphone {    @Override    public void produceIphone() {        System.out.println("------生产Iphone5--------");    }}

 

小米手机接口

package factory;/** * Created by dingshuangkun on 2018/1/26. */public interface XiaoMi extends Phone{    void produceXiaoMi();     @Override     default void producePhone(){         produceXiaoMi();     }}
package factory.impl;import factory.XiaoMi;/** * Created by dingshuangkun on 2018/1/26. */public class XiaoMi4  implements XiaoMi{    @Override    public void produceXiaoMi() {        System.out.println("-------生产小米4---------");    }}

 

package factory.impl;import factory.XiaoMi;/** * Created by dingshuangkun on 2018/1/26. */public class XiaoMi5 implements XiaoMi {    @Override    public void produceXiaoMi() {        System.out.println("------------生产小米5----------");    }}

 

Iphone工厂

package factory.impl;import factory.Creator;import factory.Iphone;import factory.Phone;/** * Created by dingshuangkun on 2018/1/26. */public class IPhoneFactory implements Creator {    @Override    public 
T creatorProduct(Class
c) { Iphone iphone = null; try { iphone =(Iphone)c.newInstance(); }catch (Exception e){ e.printStackTrace(); } return (T)iphone; }}

 

小米工厂

package factory.impl;import factory.Creator;import factory.Iphone;import factory.Phone;import factory.XiaoMi;/** * Created by dingshuangkun on 2018/1/26. */public class XiaoMiFactory implements Creator {    @Override    public 
T creatorProduct(Class
c) { XiaoMi xiaoMi = null; try { xiaoMi =(XiaoMi)c.newInstance(); }catch (Exception e){ e.printStackTrace(); } return (T)xiaoMi; }}

 

客户端

package factory;import factory.impl.*;/** * Created by dingshuangkun on 2018/1/26. */public class Client {    public static void main(String[] args) {        Creator xiaomiFactory = new XiaoMiFactory();        Phone xiaoMi4 = xiaomiFactory.creatorProduct(XiaoMi4.class);         Phone xiaoMi5 = xiaomiFactory.creatorProduct(XiaoMi5.class);        Creator iphoneFactory = new IPhoneFactory();        Phone iphone4 = iphoneFactory.creatorProduct(Iphone4.class);        Phone iphone5 = iphoneFactory.creatorProduct(Iphone5.class);        xiaoMi4.producePhone();        xiaoMi5.producePhone();        iphone4.producePhone();        iphone5.producePhone();    }}

 

运行结果

-------生产小米4---------

------------生产小米5----------
------生产Iphone4--------
------生产Iphone5--------

Process finished with exit code 0

 

转载于:https://my.oschina.net/u/3218528/blog/1613618

你可能感兴趣的文章
函数的基础及参数
查看>>
Oracle财务系统常用标准报表
查看>>
[CLPR] 定位算法探幽 - 边缘和形态学
查看>>
使用SQL Server Management Studio 创建数据库备份作业
查看>>
DEVOPS基础
查看>>
think in uml 2.1
查看>>
Objective-C Runtime那点事儿
查看>>
JavaIO基础学习笔记
查看>>
18年书单推荐
查看>>
30 个惊艳的 Bootstrap 扩展插件
查看>>
我的博客园开通啦!
查看>>
[LeetCode] Number of Islands
查看>>
绿色版Tomcat的配置
查看>>
MAC 终端基本命令
查看>>
css知识
查看>>
supervisor 管理
查看>>
Oracle DB优化-如何看SQL的执行计划+收集表的统计信息
查看>>
深度学习基础系列(六)| 权重初始化的选择
查看>>
angular4 跨域携带cookie的设置
查看>>
蓝桥杯第五届JavaC组杨辉三角问题解决方法
查看>>