1,简单工厂,工厂模式,抽象工厂类图
产品等级结构
- 产品的继承结构
如图一的圆形表示的冰箱就是一个产品等级结构,三角形表示的洗衣机、方形表示的空调他们都是一个产品等级结构
产品族
- 不同的产品等级结构的一组产品组成产品族
如图二的第一行实心红色表示的就是一个产品族,其中该海尔的产品族分别由海尔冰箱、海尔洗衣机和海尔空调组成。
产品族和产品等级结构的关系
image
- 从图二纵向来看,不管是海尔空调、美的空调、国美空调他们都是同一种产品结构的不同的品牌产品
- 从横向来看海尔产品族、美的产品族、国美产品族,组成他们的产品等级结构都是相同的。并且他们都是家电类、切包含的产品相同
- 一组相同产品等级结构的产品可以通过工厂方法表示:如海尔空调、格力空调、美的空调、国美空调等他们都是空调。
- 产品族可以用抽象工厂表示
- 简单工厂代码
public class ShapeFactory {
public Shape getShape(String shapeType){
if(shapeType.equalsIgnoreCase("circle")){
return new Circle();
}else if(shapeType.equalsIgnoreCase("rectangle")){
return new Rectangle();
}else if(shapeType.equalsIgnoreCase("squere")){
return new Squere();
}
return null;
}
}
工厂模式代码
public abstract class ShapeFactory {
public abstract Shape getShape();
}
public class CircleFactory extends ShapeFactory {
@Override
public Shape getShape() {
return new Circle();
}
}
public class RectangleFactroy extends ShapeFactory {
@Override
public Shape getShape() {
return new Rectangle();
}
}
抽象工厂
/**
* 手机产品接口
*/
public interface IPhoneProduct {
void start();
void shutdown();
void callUp();
void sendSMS();
}
/**
* 路由器产品接口
*/
public interface IRouterProduct {
void start();
void shutdown();
void openWifi();
void setting();
}
/**
* 抽象产品工厂(定义了同一个产品族的产品生产行为)
*/
public interface IProductFactory {
IPhoneProduct produceTelPhone();
IRouterProduct produceRouter();
}
/**
* 华为手机产品
*/
public class HuaweiPhone implements IPhoneProduct {
@Override
public void start() {
System.out.println("开启华为手机");
}
@Override
public void shutdown() {
System.out.println("关闭华为手机");
}
@Override
public void callUp() {
System.out.println("用华为手机打电话");
}
@Override
public void sendSMS() {
System.out.println("用华为手机发短信");
}
}
/**
* 华为路由器产品
*/
public class HuaweiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("启动华为路由器");
}
@Override
public void shutdown() {
System.out.println("关闭华为路由器");
}
@Override
public void openWifi() {
System.out.println("打开华为路由器的wifi功能");
}
@Override
public void setting() {
System.out.println("设置华为路由器参数");
}
}
/**
* 小米手机产品
*/
public class XiaomiPhone implements IPhoneProduct {
@Override
public void start() {
System.out.println("开启小米手机");
}
@Override
public void shutdown() {
System.out.println("关闭小米手机");
}
@Override
public void callUp() {
System.out.println("用小米手机打电话");
}
@Override
public void sendSMS() {
System.out.println("用小米手机发短信");
}
}
/**
* 小米路由器产品
*/
public class XiaomiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("启动小米路由器");
}
@Override
public void shutdown() {
System.out.println("关闭小米路由器");
}
@Override
public void openWifi() {
System.out.println("打开小米路由器的wifi功能");
}
@Override
public void setting() {
System.out.println("设置小米路由器参数");
}
}
/**
* 华为产品工厂
*/
public class HuaweiProductFactory implements IProductFactory{
@Override
public IPhoneProduct produceTelPhone() {
System.out.println(">>>>>>生产华为手机");
return new HuaweiPhone();
}
@Override
public IRouterProduct produceRouter() {
System.out.println(">>>>>>生产华为路由器");
return new HuaweiRouter();
}
@Override
public IComputer produceComput() {
return null;
}
}
/**
* 小米产品工厂
*/
public class XiaomiProductFactory implements IProductFactory {
@Override
public IPhoneProduct produceTelPhone() {
System.out.println(">>>>>>生产小米手机");
return new XiaomiPhone();
}
@Override
public IRouterProduct produceRouter() {
System.out.println(">>>>>>生产小米路由器");
return new XiaomiRouter();
}
@Override
public IComputer produceComput() {
return null;
}
}