抽象工厂模式
Posted 2016-zck
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象工厂模式相关的知识,希望对你有一定的参考价值。
模式定义
抽象工厂模式:提供一个创建一系列相关或相关依赖对象的接口,而无需指定他们具体的类,抽象工厂模式又被称为Kit模式,属于对象创建型模式。
模式结构
以window和linux的按钮和文本框为例
模式分析
优点:
(1)抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建,在某种程度上,改变其工厂可以改变整个运行环境。
(2)当一个 产品族中多个对象一起工作时,它能保证客户端只使用一个产品族对象。
(3)符合开闭原则,增加新的具体工厂和产品族很方便。
缺点:
(1)在添加新的产品时,难以扩展抽象工厂来生产新种类的产品,针对抽象工厂的扩展,这将涉及到对抽象工厂角色及所有子类的修改,显然带来很多不便。
电视空调案例
TV接口类
package com.zck.abstractfactory; public interface TV { public void play(); }
HaierTV类
package com.zck.abstractfactory; public class HaierTV implements TV { public void play() { System.out.print("海尔电视正在播放 "); } }
TCLTV类
package com.zck.abstractfactory; public class TCLTV implements TV { public void play() { System.out.print("TCL电视正在播放 "); } }
空调接口类
package com.zck.abstractfactory; public interface AirConditioner { public void change(); }
海尔空调类
package com.zck.abstractfactory; public class HaierAirConditioner implements AirConditioner { public void change() { System.out.print("海尔空调正在改变温度 "); } }
TCL空调类
package com.zck.abstractfactory; public class TCLAirConditoner implements AirConditioner { public void change() { System.out.print("TCL空调正在改变温度 "); } }
工厂接口类
package com.zck.abstractfactory; public interface Factory { public TV produceTV(); public AirConditioner produceAirConditioner(); }
海尔工厂类
package com.zck.abstractfactory; public class HaierFactory implements Factory { public TV produceTV() { return new HaierTV(); } public AirConditioner produceAirConditioner() { return new HaierAirConditioner(); } }
TCL工厂类
package com.zck.abstractfactory; public class TCLFactory implements Factory { public TV produceTV() { return new TCLTV(); } public AirConditioner produceAirConditioner() { return new TCLAirConditoner(); } }
client测试类
package com.zck.abstractfactory; public class Client { public static void main(String[] args) { Factory factory; TV tv; AirConditioner airConditioner; factory = new HaierFactory(); tv = factory.produceTV(); airConditioner = factory.produceAirConditioner(); tv.play(); airConditioner.change(); } }
测试结果
以上是关于抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章