艾乐时代 网站建设,餐饮网站建设背景,wordpress小说站,亚马逊网站建设性提议1.抽象工厂模式定义:
抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口#xff0c;无需指定它们具体的类
2.抽象工厂模式适用场景:
客户端(应用层)不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量…1.抽象工厂模式定义:
抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口无需指定它们具体的类
2.抽象工厂模式适用场景:
客户端(应用层)不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码提供一个产品类的库所有的产品以同样的接口出现从而使得客户端不依赖于具体的实现
3.抽象工厂模式的优缺点 优点:
具体产品在应用层的代码隔离无需关心创建的细节将一个系列的产品统一到一起创建缺点:
规定了所有可能被创建的产品集合产品簇中扩展新的产品困难增加了系统的抽象性和理解难度创建一个手机接口 cn.xs.abstraction.IPhoneProduct 代码如下public interface IPhoneProduct {
/**
* 开机
*/
void open();
/**
* 关机
*/
void close();
/**
* 发短信
*/
void send();
/**
* 打电话
*/
void call();
}
创建一个路由器接口 cn.xs.abstraction.IRouterProduct 代码如下 public interface IRouterProduct {
/**
* 开机
*/
void open();
/**
* 关机
*/
void close();
/**
* 设置参数
*/
void setting();
/**
* 打开 wifi
*/
void wifi();
}
新建小米手机产品类 cn.xs.abstraction.XiaomiPhone 代码如下 public class XiaomiPhone implements IPhoneProduct {
public void open() {
System.out.println(小米手机开机);
}
public void close() {
System.out.println(小米手机关机);
}
public void send() {
System.out.println(小米手机发短信);
}
public void call() {
System.out.println(小米手机打电话);
}
}
新建小米路由器产品类 cn.xs.abstraction.XiaomiRouter 代码如下public class XiaomiRouter implements IRouterProduct {
public void open() {
System.out.println(小米路由器开机);
}
public void close() {
System.out.println(小米路由器关机);
}
public void setting() {
System.out.println(小米路由器设置参数);
}
public void wifi() {
System.out.println(小米路由器打开wifi);
}
}
新建华为手机产品类 cn.xs.abstraction.HuaweiPhone 代码如下 public class HuaweiPhone implements IPhoneProduct {
public void open() {
System.out.println(华为手机开机);
}
public void close() {
System.out.println(华为手机关机);
}
public void send() {
System.out.println(华为手机发短信);
}
public void call() {
System.out.println(华为手机打电话);
}
}
新建华为路由器产品类 cn.xs.abstraction.HuaweiRouter 代码如下 public class HuaweiRouter implements IRouterProduct {
public void open() {
System.out.println(华为路由器开机);
}
public void close() {
System.out.println(华为路由器关机);
}
public void setting() {
System.out.println(华为路由器设置参数);
}
public void wifi() {
System.out.println(华为路由器打开wifi);
}
}
新建抽象工厂 cn.xs.abstraction.IProductFactory 来生产手机跟路由器抽象public interface IProductFactory {
/**
* 生产手机
*
* return
*/
IPhoneProduct getPhone();
/**
* 生产路由器
*
* return
*/
IRouterProduct getRouter();
}
新建小米工厂 cn.xs.abstraction.XiaomiFactory 来生产手机跟路由器 public class XiaomiFactory implements IProductFactory {
public IPhoneProduct getPhone() {
return new XiaomiPhone();
}
public IRouterProduct getRouter() {
return new XiaomiRouter();
}
}
新建华为工厂 cn.xs.abstraction.HuaweiFactory 来生产手机跟路由器 public class HuaweiFactory implements IProductFactory {
public IPhoneProduct getPhone() {
return new HuaweiPhone();
}
public IRouterProduct getRouter() {
return new HuaweiRouter();
}
} 根据类图关系深入了解 新建测试类 cn.xs.abstraction.Client 来进行测试
public class Client {
/**
* 测试方法
*
* param args
*/
public static void main(String[] args) {
System.out.println(小米系列产品);
// 创建小米工厂
IProductFactory factory1 new XiaomiFactory();
IPhoneProduct phone1 factory1.getPhone();
phone1.send();
phone1.call();
IRouterProduct router1 factory1.getRouter();
router1.setting();
router1.wifi();
System.out.println(华为系列产品);
// 创建华为工厂
IProductFactory factory2 new HuaweiFactory();
IPhoneProduct phone2 factory2.getPhone();
phone2.send();
phone2.call();
IRouterProduct router2 factory2.getRouter();
router2.setting();
router2.wifi();
}
}
再看一下整体的一个类图 运行 main 抽象工厂模式在产品稳定的情况下是极其强大的但是如果要添加产品其子类都需要修改代码违反了开闭原则小结 简单工厂模式(静态工厂模式)虽然某种程度上不符合设计原则但实际使用最多!工厂方法模式不修改已有类的前提下通过增加新的工厂类实现扩展抽象工厂模式不可以增加产品可以增加产品族!应用场景: JDK中Calendar的getInstance方法 JDBC中的Connection对象的获取 Spring中IOC容器创建管理bean对象反射中Class对象的newInstance方法